欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java8 lambda表达式2种常用方法代码解析

程序员文章站 2022-04-05 11:49:03
与python不一样,python lambda是定义匿名函数,而在java8中lambda是匿名内部类例1、用lambda表达式实现runnable我开始使用java 8时,首先做的就是使用lamb...

与python不一样,python lambda是定义匿名函数,而在java8中lambda是匿名内部类

例1、用lambda表达式实现runnable

我开始使用java 8时,首先做的就是使用lambda表达式替换匿名类,而实现runnable接口是匿名类的最好示例。看一下java 8之前的runnable实现方法,需要4行代码,而使用lambda表达式只需要一行代码。我们在这里做了什么呢?那就是用() -> {}代码块替代了整个匿名类。

// java 8之前:
new thread(new runnable() {
  @override
  public void run() {
  system.out.println("before java8, too much code for too little to do");
  }
}).start();

//java 8方式:
new thread( () -> system.out.println("in java8, lambda expression rocks !!") ).start();

输出:

too much code, for too little to do
lambda expression rocks !!

这个例子向我们展示了java 8 lambda表达式的语法。你可以使用lambda写出如下代码:

(params) -> expression
(params) -> statement
(params) -> { statements }

例如,如果你的方法不对参数进行修改、重写,只是在控制台打印点东西的话,那么可以这样写:

() -> system.out.println("hello lambda expressions");

如果你的方法接收两个参数,那么可以写成如下这样:

(int even, int odd) -> even + odd

顺便提一句,通常都会把lambda表达式内部变量的名字起得短一些。这样能使代码更简短,放在同一行。所以,在上述代码中,变量名选用a、b或者x、y会比even、odd要好。

例2、使用java 8 lambda表达式进行事件处理

如果你用过swing api编程,你就会记得怎样写事件监听代码。这又是一个旧版本简单匿名类的经典用例,但现在可以不这样了。你可以用lambda表达式写出更好的事件监听代码,如下所示:

// java 8之前:
jbutton show = new jbutton("show");
show.addactionlistener(new actionlistener() {
  @override
  public void actionperformed(actionevent e) {
  system.out.println("event handling without lambda expression is boring");
  }
});

// java 8方式:
show.addactionlistener((e) -> {
  system.out.println("light, camera, action !! lambda expressions rocks");
});

java开发者经常使用匿名类的另一个地方是为 collections.sort() 定制 comparator。在java 8中,你可以用更可读的lambda表达式换掉丑陋的匿名类。我把这个留做练习,应该不难,可以按照我在使用lambda表达式实现 runnable 和 actionlistener 的过程中的套路来做。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。