Java 8 的一个大亮点是引入 Lambda 表达式,应用它设计的代码会更加简洁。当开发者在编写 Lambda 表达式时,也会随之被编译成一个函数式接口。上面这个例子就是应用 Lambda 语法来代替匿名的外部类,代码不仅简洁,而且还可读。
Lambda 容许把函数作为一个办法的参数(函数作为参数传递进办法中)。
应用 Lambda 表达式能够使代码变的更加简洁紧凑。
lambda 表达式的语法格局如下:
(parameters) -> expression
或
(parameters) ->{statements;}
没有应用 Lambda 的老办法:
button.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent actionEvent){System.out.println("Action detected");
}
});
应用 Lambda:
button.addActionListener( actionEvent -> {System.out.println("Action detected");
});
让咱们来看一个更显著的例子。
不采纳 Lambda 的老办法:
Runnable runnable1=new Runnable(){
@Override
public void run(){System.out.println("Running without Lambda");
}
};
应用 Lambda:
Runnable runnable2=()->System.out.println("Running from Lambda");
正如所看到的,应用 Lambda 表达式不仅让代码变的简略,并且可读,最重要的是代码量也随之缩小很多。然而,在某种程度上,这些性能在 Scala 等这些 JVM 语言里曾经被宽泛应用。
并不奇怪,Scala 社区是难以置信的,因为许多 Java 8 里的内容看起来就像是从 Scala 里搬过去的。在某种程度上,Java 8 的语法要比 Scala 的更具体但不是很清晰,但这并不能阐明什么,如果能够,它可能会像 Scala 那样构建 Lambda 表达式。
一方面,如果 Java 持续围绕 Lambda 来倒退和实现 Scala 都曾经实现的性能,那么可能就不须要 Scala 了。另一方面,如果它只提供一些外围的性能,例如帮忙匿名外部类,那么 Scala 和其余语言将会持续茁壮成长,并且有可能会凌驾于 Java 之上。其实这才是最好的后果,有竞争才有提高,其它语言持续倒退和成长,并且无需放心是否会过期。