本文接上一篇java1.8 lambda表达式初识(一),系统的介绍lambda表达式的语法。
1.为什么引入lambda表达式;
lambda表达式是一个可传递的代码块,可以在以后执行一次或者多次。我们可以观察java在哪里遇到了这种代码块。例如我们想按照长度对字符串数组进行排序而不是按照默认的字典顺序排序,可以向Arrays.sort方法传入一个Comparator对象:
class LengthComparator implements Comparator<String>{
public int compare(String first, String second){
return first.length() - second.length();
}
}
....
Arrays.sort(stringArray, new LengthComparator());
到目前为止,在java中传递一个代码块并不容易,不能直接传递代码段。java是面向对象的语言,必须构造一个对象,这个对象的类需要有一个方法能包含所需的代码。
2.lambda表达式语法:
再看上面的排序的例子:
public int compare(String first, String second){
return first.length() - second.length();
}
我们可以写成:
(String first, String second) -> first.length() - second.length();
这是我们看到的第一个lambda表达式的例子。
大致来讲,lambda表达式的语法如下:
1) 参数,箭头(->)再加上一个表达式。如果代码要完成的计算无法放在一个计算表达式中,可以像写方法一样,把这些代码放在大括号中,并包含显式的return语句,例:
(String first, String second) -> {
if(first.length() < second.length()) return -1;
else if(first.length() > second.length()) return 1;
else return 0;
}
2)即使lambda表达式没有参数,仍要提供空括号,就像无参方法一样:
() -> { System.out.println("This is no arg lambda!")};
3)如果可以推导出一个lambda表达式的参数类型,则可以忽略其类型,如:
Comparator<String> comp =
(first, second) -> first.length() - second.length();
参考资料:java核心技术卷1(第十版)