引言
一直以来,Java有一个为人所不满的缺点:啰嗦。有些简单的东西,可能需要撰写更多代码才能完成。
幸好,Java为我们推出了很多新功能,来解决其中的问题。本文主要想介绍Java8的lambda表达式。
lambda
之前的版本
先来看这么一串代码
String[] name = {"Mike", "Tom", "Jerry", "Potty", "Moggy"};
Arrays.sort(name, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
有五个小朋友,他们有不同的名字。我们希望按照字母的顺序为其排序。按照Java7的写法,我们需要完成一个Comparator
接口,并实现其中的compare
方法。以完成排序。
使用lambda的写法
使用IDEA的朋友们可能发现,之前的代码被标为了黄色。IDEA会将你的代码改成这样
Arrays.sort(name, (o1, o2) -> o1.compareTo(o2));
原本的compare
函数消失了,变成了 (o1, o2) -> o1.compareTo(o2)
。这是怎么回事呢?
什么是lambda
其实这就是lambda表达式,Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。(o1, o2) -> o1.compareTo(o2)
意为,传入了o1,o2两个参数,将 o1.compareTo(o2)
的值作为返回值。简单的语法就完成了原本五六行代码的工作量。
还能更简单吗?
能!如果使用Java8的另外一个特性,方法引用
,撰写的代码量会更少。有关方法引用的使用,我会在之后的文章里进行介绍。
lambda的更多示例
启动子线程
new Thread(() -> System.out.println("Hello World")).start();
等价于
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Hello World");
}
}).start();
显而易见,使用lambda语句,可以使代码更为简洁。