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

Lambda表达式语法进一步巩固的更多相关文章

  1. Java8初体验(一)lambda表达式语法

    感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com 本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解 ...

  2. Java8 lambda表达式语法 1

    本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解偏差的地方,希望大家帮忙指出,我会持续修改和优化.本文是该系列的第一篇, ...

  3. Lambda 表达式语法

    本主题介绍 lambda 表达式的语法. 它演示提供 lambda 表达式的结构元素的示例,这些元素与示例. Lambda 表达式语法 下面用于定义显示语法,ISO C++11 从标准,lambda ...

  4. Java8初体验(1):lambda表达式语法

    原文出处: 一冰_天锦 本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解偏差的地方,希望大家帮忙指出,我会持续修改和优化 ...

  5. Lambda表达式语法

    基础语法:‘->’Lambda操作符* 左侧:Lambda表达式的参数列表 对应接口中方法中的参数列表中的参数(比如nice1中MyPredict这个接口中的方法)* 右侧:Lambda表达式中 ...

  6. java8【一、lambda表达式语法】

    特点 lambda表达式允许将函数作为方法的参数 lambda表达式更加简洁 特征 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值. 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需 ...

  7. JDK8--03:lambda表达式语法

    对于lambda表达式的基础语法,一个是要了解lambda表达式的基础语法,另外一个是需要了解函数式接口 一.lambda表达式基础语法描述 java8中引入了新的操作符  ->  ,可以称为l ...

  8. Lambda表达式语法2

    package airycode_java8.nice3; import airycode_java8.nice1.Employee; import org.junit.Test; import ja ...

  9. Lambda表达式的语法与如何使用Lambda表达式

    Lambda表达式是对象,是一个函数式接口的实例 如何来写Lambda表达式? 看参数 看返回值 代码实例1: package day2; import jdk.nashorn.internal.co ...

随机推荐

  1. 用JavaScript来实现单例模式

    首先,了解一下什么是单例模式,这里我直接把菜鸟教程中的定义给copy过来: 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供 ...

  2. 开发工具之GIT

    GIT WORKFLOW this readme created on 2019.07.28 by Suarez7988 这是一遍介绍git版本控制流程的中文说明,必须通篇阅读一下 https://g ...

  3. Docker二

    Docker生成镜像的两种方式 有时候从Docker镜像仓库中下载的镜像不能满足要求,我们可以基于一个基础镜像构建一个自己的镜像 两种方式: 更新镜像:使用docker commit命令 构建镜像:使 ...

  4. webdriver(处理select下拉框元素)

    """处理下拉框""" from selenium import webdriver from selenium.webdriver.com ...

  5. 最新 4399java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.4399等10家互联网公司的校招Offer,因为某些自身原因最终选择了4399.6.7月主要是做系统复习.项目复盘.Leet ...

  6. Encoding.GetEncoding 编码列表

    代码页 名称 显示名称   37 IBM037 IBM EBCDIC(美国 - 加拿大)   437 IBM437 OEM 美国   500 IBM500 IBM EBCDIC(国际)   708 A ...

  7. Python基础总结之第十天开始【认识模块、包和库】(新手可相互督促)

    每天都有一种备课的赶脚~~~ 什么是模块? 在实际的开发过程中,代码量肯定有成千上万行的代码,甚至十几万行代码也很正常吧... 那么这么多的代码如果放在一个文件中,肯定是很不合适的,为了以后程序的编写 ...

  8. [转帖]redis监控工具汇总

    redis监控工具汇总 https://www.cnblogs.com/felixzh/p/11170143.html redis-stat redis-stat是一个比较有名的redis指标可视化的 ...

  9. java中public protected friendly private作用域

    1.public:public表明该数据成员.成员函数是对所有用户开放的,所有用户都可以直接进行调用 2.private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直 ...

  10. S02_CH13_ AXI_PWM 实验

    S02_CH13_ AXI_PWM 实验 当学习了上一章的协议介绍内容后,开发基于这些协议的方案已经不是什么难事了,关键的一点就是从零到有的突破了.本章就以AXI-Lite总线实现8路LED自定义IP ...