上一次已经初步使用到了Lambda表达式了,这次再次对它的语法进行一下巩固,因为它实在是太重要的,所以多花时间彻底理解它是非常有必要的。
在"Java8 in Action"一书中对Lambda表达式有如下描述,做个了解:
下面则用代码去使用Lambda表达式来加深对它的印象,会有各种不同的形式,其中还会涉及到一些使用判断它对错的地方,总之这次纯练Lambda表达式。
对于集合的排序我想肯定都非常熟悉,先看下原来它的模拟写法:
不多解释,人人都懂,上次也提到过Comparator在JAVA8中是可以使用Lambda表达式的,其接口也已经声明成函数式了:
所以用Lambda改造如下:
其中需要注意的几个细节:
1、参数类型可以省略,如代码:
2、->之后的部份如果木有加{}号,返回值的return可以省略,如代码的示:
但是!如果有了{},而且方法有返回值,那必须加上return:
3、一个以上的参数必须要加括号:
那Lambda表达式的语法到底是怎么定义的呢?书中对它有介绍,如下:
下面来看几个合法的Lambda表达式,书上也介绍了:
咱们自己动手也来写几个合法的Lambda表达式看看:
①、第一个合法表达式:
这时因为这个Lambda表达式是为了Function服务的,所以可以给它定义一个成员变量:
有木有发现在Rxjava中有用到Function这个接口,说明Rxjava是基于JAVA8的特性来写的框架,这时查看下Function这个类在JAVA8中所在包的位置:
这么多Function得学多久呀,不用太过担心,这些都是可以一通百通的,之后也会慢慢去学,先有个大致的印象。
接着继续写合法Lambda表达式:
②、第二个合法表达式:
这是上次我们写过的,也是需要用Function接收一下,如下:
这里又出现了另外一个Function,也是其JAVA8众多Function中的一员,粗略看一下它的源码:
③、第三个合法表达式:
其实它的接口原型就是类似于这种:
④、第四个合法表达式:
它的接口原型是:
上面写的这些合法的Lambda表达式可以总结为下面两种:
如:-
如:
那基于上面正确的Lambda语法,判断一下下面的几种写法是否是合法的:
合法的,实际上Runnable接口就是它这种:
- 、
很显示是合法的,不多解释了。
-
这个不合法,有两点不合法:
1、有return,必须要有大括号;
2、return是个statements,所以后面需要跟一个";",更正如下: -
不合法,修正它有两种:
1、去掉分号:
2、加上分号与大括号,并加上return: