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:
Lambda表达式语法进一步巩固的更多相关文章
- Java8初体验(一)lambda表达式语法
感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com 本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解 ...
- Java8 lambda表达式语法 1
本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解偏差的地方,希望大家帮忙指出,我会持续修改和优化.本文是该系列的第一篇, ...
- Lambda 表达式语法
本主题介绍 lambda 表达式的语法. 它演示提供 lambda 表达式的结构元素的示例,这些元素与示例. Lambda 表达式语法 下面用于定义显示语法,ISO C++11 从标准,lambda ...
- Java8初体验(1):lambda表达式语法
原文出处: 一冰_天锦 本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解偏差的地方,希望大家帮忙指出,我会持续修改和优化 ...
- Lambda表达式语法
基础语法:‘->’Lambda操作符* 左侧:Lambda表达式的参数列表 对应接口中方法中的参数列表中的参数(比如nice1中MyPredict这个接口中的方法)* 右侧:Lambda表达式中 ...
- java8【一、lambda表达式语法】
特点 lambda表达式允许将函数作为方法的参数 lambda表达式更加简洁 特征 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值. 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需 ...
- JDK8--03:lambda表达式语法
对于lambda表达式的基础语法,一个是要了解lambda表达式的基础语法,另外一个是需要了解函数式接口 一.lambda表达式基础语法描述 java8中引入了新的操作符 -> ,可以称为l ...
- Lambda表达式语法2
package airycode_java8.nice3; import airycode_java8.nice1.Employee; import org.junit.Test; import ja ...
- Lambda表达式的语法与如何使用Lambda表达式
Lambda表达式是对象,是一个函数式接口的实例 如何来写Lambda表达式? 看参数 看返回值 代码实例1: package day2; import jdk.nashorn.internal.co ...
随机推荐
- 基于LSTM + keras 的诗歌生成器
最近在github 上发现了一个好玩的项目,一个基于LSTM + keras 实现的诗歌生成器,地址是:https://github.com/youyuge34/Poems_generator ...
- Python_小林的爬取QQ空间相册图片链接程序
前言 昨天看见某人的空间有上传了XXXX个头像,然后我就想着下载回来[所以本质上这是一个头像下载程序],但是一个个另存为太浪费时间了,上网搜索有没有现成的工具,居然要注册码,还卖45一套.你们的良心也 ...
- ffmpeg学习笔记-初识ffmpeg
ffmpeg用来对音视频进行处理,那么在使用ffmpeg前就需要ffmpeg有一个大概的了解,这里使用雷神的ppt素材进行整理,以便于复习 音视频基础知识 视频播放器的原理 播放视频的流程大致如下: ...
- Java反射:Web学习的灵魂
反射:Web学习的灵魂 我们从最初的 javac -HelloWorld.java,到面向对象部分,我们可以将Java代码在计算机中经历的阶段分为三部分:Scource源代码阶段 -- Class类对 ...
- uniapp如何使用阿里iconfont
1.将iconfont中需要的图标,添加到购物车,然后添加到自己的项目.生成在线代码. 2.点击下载至本地.然后解压后复制 iconfont.css 文件到你的项目. 3.复制第一步生成的代码,替换i ...
- 【51nod】2027 期望问题
[51nod]2027 期望问题 %%%zsy 看不懂题解的垃圾选手在zsy大佬的讲解下终于知道了这道题咋做-- 先把所有\(a\)从大到小排序 设\(f_{i}\)为前\(i\)个数组成的排列的值, ...
- COGS 2633. [HZOI 2016] 数列操作e
[题目描述] 一个长度为n的序列,一开始序列数的权值都是0,有m次操作 支持两种操作, 1 L R x,给区间[L,R]内,第一个数加x,第二个数加2^2⋅x,第三个数加3^2⋅x...第R-L+1个 ...
- image的路径写法格式
if (MapGrid.Visibility == Visibility.Visible) { this.MapGrid.Visibility = Visibility.Collapsed; ...
- RedHat7 配置yum源
今天需要搭建一个测试环境,没办法只能找了个Linux服务器,但是之前的其他同事弄过是其他系统的,不是centos的,所以只能自己搞. 合计直接百度,怎么安装docker,结果一直报错,下载失败之类的 ...
- linux下mysql数据导入到redis
自Redis 2.6以上版本起,Redis支持快速大批量导入数据,即Pipe传输.通过将要导入的命令转换为Resp格式,然后通过MySQL的concat()来整理出最终导入的命令集合,以达到快速导入的 ...