为什么引入lambda表达式
定义:lambda表达式是一个可传递的代码块,可以在以后执行一次或多次。
想一想我们在java那些地方用过代码块。
对啦,考虑按长度对字符串进行排序,可以向sort方法传入一个Comparator对象:
class student implements Comparator{ public int compare(String first,String second) { return first.length()-second.length(); } } Arrays.sort(strings,new student());//对strings字符串数组进行排序。
java语言的异处:在Java中不能直接传递代码段。Java是面向对象的语言,所以必须构造一个对象,这个对象的类需要有一个方法包含所需的代码。
终于在做了多年的尝试后,终于找到一种适合java的设计——lambda表达式。
lambda表达式的语法
考虑方法compare中的first.length()-second.length();
转化为lambda表达式为:(String first,String second)->first.length()-second.length()
lambda表达式是一个代码块,以及必须传入代码的变量规范。
java lambda表达式的一种形式:参数,箭头(->)以及一个表达式。
如果代码的计算无法放在一个表达式中,可以像写方法一样,把这些代码放在{}中,并包含显示的return语句。例如:
(String first,String second)->
{
if(first.length()second.length())return 1;
else return 0;
}
即使lambda表达式没有参数,仍然要提供空括号。
()->{for(int i=100;i>=0;i--)System.out.println(i);}
如果可以推导出一个lambda表达式的参数类型,则可以忽略其类型。例如:
Comparator
如果方法只有一个参数,而且这个参数的类型可以推导出,则可以省略小括号:
ActionListener listener=event->.........;
无须指定lambda表达式的返回类型。lambda表达式的返回类型总是会由上下文推到得出。
如果一个lambda表达式只在某些分支返回一个值,而另外一些分支不返回值,这是不合法的。例如:
(int x)->{if(x>=0)return 1;}//error.



