Lambda语法详解
我们在此抽象一下lambda表达式的一般语法:
1
|
(Type1 param1, Type2 param2, ..., TypeN paramN) -> {
|
从lambda表达式的一般语法可以看出来,还是挺符合上面给出的非精确版本的定义–“一段带有输入参数的可执行语句块”。
上面的lambda表达式语法可以认为是最全的版本,写起来还是稍稍有些繁琐。别着急,下面陆续介绍一下lambda表达式的各种简化版:
1. 参数类型省略–绝大多数情况,编译器都可以从上下文环境中推断出lambda表达式的参数类型。这样lambda表达式就变成了:
1
|
(param1,param2, ..., paramN) -> {
|
所以我们最开始的例子就变成了(省略了List的创建):
1
|
List<String> lowercaseNames = names.stream().map((name) -> { return name.toLowerCase();}).collect(Collectors.toList());
|
2. 当lambda表达式的参数个数只有一个,可以省略小括号。lambda表达式简写为:
所以最开始的例子再次简化为:
1
|
List<String> lowercaseNames = names.stream().map(name -> { return name.toLowerCase();}).collect(Collectors.toList());
|
3. 当lambda表达式只包含一条语句时,可以省略大括号、return和语句结尾的分号。lambda表达式简化为:
所以最开始的例子再次简化为:
1
|
List<String> lowercaseNames = names.stream().map(name -> name.toLowerCase()).collect(Collectors.toList());
|
4. 使用Method Reference(具体语法后面介绍)
1
|
//注意,这段代码在Idea 13.0.2中显示有错误,但是可以正常运行
|
2
|
List<String> lowercaseNames = names.stream().map(String::toLowerCase).collect(Collectors.toList());
|
方法引用有很多种,它们的语法如下:
- 静态方法引用:
ClassName::methodName
- 实例上的实例方法引用:
instanceReference::methodName
- 超类上的实例方法引用:
super::methodName
- 类型上的实例方法引用:
ClassName::methodName
- 构造方法引用:
Class::new
- 数组构造方法引用:
TypeName[]::new
参考文献:
【1】http://ifeve.com/lambda/
转载于:https://www.cnblogs.com/davidwang456/p/6180819.html
java8 lamda快速入门相关推荐
- java8 stream 教程_java8 Stream 流快速入门
Stream 流 简介 Java 8 中,得益于 lambda 带来的函数式编程,引入了一个全新的 Stream流 概念,用于解决集合已有的弊端. 好处 我们先来看一个例子: 筛选出 names 中以 ...
- java8生成jsp页面内容组装到jsp中_JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构、调试、部署...
接上篇<JAVA WEB快速入门之环境搭建>,在完成了环境搭建后(JDK.Tomcat.IDE),现在是万事具备,就差写代码了,今天就来从编写一个JSP WEB网站了解JSP WEB网站的 ...
- Spring MVC 4快速入门Maven原型已改进
Spring Boot使Spring入门非常容易. 但是仍然有人对不使用Spring Boot并以更经典的方式引导应用程序感兴趣. 几年前,我创建了一个原型(早于Spring Boot),简化了引导S ...
- java和以太坊交互_java类库web3j开发以太坊智能合约快速入门
web3j简介 web3j是一个轻量级.高度模块化.响应式.类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成. 可以通过它进行以太坊 ...
- spring boot 快速入门
文章来源:https://www.cnblogs.com/junyang/p/8151802.html spring boot入门 -- 介绍和第一个例子 "越来越多的企业选择使用sprin ...
- 【720开发】 spring boot 快速入门
spring boot 快速入门 通过构建简单的REST应用,了解spring boot的开发基本流程,验证其简单.易用特性. 环境要求 Spring Boot 2.0.0.BUILD-SNAPSHO ...
- 京东必考JVM 问题诊断快速入门
JVM 问题诊断快速入门 JVM 全称为 Java Virtual Machine,翻译为中文 "Java 虚拟机".本文中的JVM主要指 Oracle 公司的 HotSpot V ...
- MyBatis-Plus快速入门-(干货满满+超详细)
文章目录 一.MyBatis VS JPA 二.MyBatis-Plus简介 三.MyBatis-Plus快速入门 1.lombok简介及安装 2.入门小案例 四.基本使用 1.通用传统模式简介及通用 ...
- JDK8函数式编程快速入门干货
Java8引入函数式编程,极大地提高了编码效率,对于习惯了原有Java代码风格的coder,确实需要好好熟悉一番才能熟练地coding. 本文每一条讲解都配置了最简短的代码,适合快速入门或者字典使用, ...
最新文章
- Java对象转换成JSON对象/JSON对象转换成JSON字符串/JSON字符串转换成JS对象
- PHPweb应用程序开发技巧
- 第五章--数据库中间层实现读写分离
- 敏捷开发“松结对编程”实践之五:代码检查篇(大型研发团队,学习型团队,139团队,师徒制度,代码审查)...
- An internal error occurred during: Retrieving archetypes:. GC overhead limit exceeded
- IO复用与select函数
- github项目提交失败 master - master (non-fast-forward)
- net core 模型绑定与之前版本的不同-FromBody 必须对应Json格式
- neo4j---学习笔记
- 免费领,单片机入门到高级进阶学习攻略(附教程+工具)
- 破解intelliJ idea 2017
- f2fs存储结构初探
- 编译安装cacti-spine
- 《Python程序设计(第3版)》[美] 约翰·策勒(John Zelle) 第 9 章 答案
- Linux之创建组名和删除组名
- MATLAB和Python求解非线性常微分方程
- 小宝贝腾讯,以为只是改了小程序的授权机制,没想到公众号也改了!
- Shiro使用和原理分析---2
- mysql数据库之ddl语句盘点
- dubbo的常用容错机制
热门文章
- 小而美的个人博客——后端——管理页面
- php mb strimwidth,wordpress截断函数mb_strimwidth()失效的解决方法
- python中系列的含义_一篇文章让你彻底搞清楚Python中self的含义
- 怎么看空调定时成功_风管机和中央空调傻傻分不清?看了你就明白怎么选了
- Windows下Socket库的初始化和关闭
- 双任务延时原理与空闲任务
- python运用范围_如何在python中使用某个范围对数字列表进行分组?
- 计算机组成知识试题及答案,《计算机组成与结构复习题及答案.doc
- 计算机换色带技巧,色带盒怎么更换 色带盒更换安装方法【图文教程】
- lzw编码过程详解_编码拓展——封装、编码、码率