Lambda表达式语法进一步巩固

上一次已经初步使用到了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:

原文地址:https://www.cnblogs.com/webor2006/p/7705130.html