Lambda语法详解

我们在此抽象一下lambda表达式的一般语法:

1 (Type1 param1, Type2 param2, ..., TypeN paramN) -> {
2   statment1;
3   statment2;
4   //.............
5   return statmentM;
6 }

从lambda表达式的一般语法可以看出来,还是挺符合上面给出的非精确版本的定义–“一段带有输入参数的可执行语句块”。

上面的lambda表达式语法可以认为是最全的版本,写起来还是稍稍有些繁琐。别着急,下面陆续介绍一下lambda表达式的各种简化版:

1. 参数类型省略–绝大多数情况,编译器都可以从上下文环境中推断出lambda表达式的参数类型。这样lambda表达式就变成了:

1 (param1,param2, ..., paramN) -> {
2   statment1;
3   statment2;
4   //.............
5   return statmentM;
6 }

所以我们最开始的例子就变成了(省略了List的创建):

1 List<String> lowercaseNames = names.stream().map((name) -> {return name.toLowerCase();}).collect(Collectors.toList());

2. 当lambda表达式的参数个数只有一个,可以省略小括号。lambda表达式简写为:

1 param1 -> {
2   statment1;
3   statment2;
4   //.............
5   return statmentM;
6 }

所以最开始的例子再次简化为:

1 List<String> lowercaseNames = names.stream().map(name -> {return name.toLowerCase();}).collect(Collectors.toList());

3. 当lambda表达式只包含一条语句时,可以省略大括号、return和语句结尾的分号。lambda表达式简化为:

1 param1 -> statment

所以最开始的例子再次简化为:

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快速入门相关推荐

  1. java8 stream 教程_java8 Stream 流快速入门

    Stream 流 简介 Java 8 中,得益于 lambda 带来的函数式编程,引入了一个全新的 Stream流 概念,用于解决集合已有的弊端. 好处 我们先来看一个例子: 筛选出 names 中以 ...

  2. java8生成jsp页面内容组装到jsp中_JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构、调试、部署...

    接上篇<JAVA WEB快速入门之环境搭建>,在完成了环境搭建后(JDK.Tomcat.IDE),现在是万事具备,就差写代码了,今天就来从编写一个JSP WEB网站了解JSP WEB网站的 ...

  3. Spring MVC 4快速入门Maven原型已改进

    Spring Boot使Spring入门非常容易. 但是仍然有人对不使用Spring Boot并以更经典的方式引导应用程序感兴趣. 几年前,我创建了一个原型(早于Spring Boot),简化了引导S ...

  4. java和以太坊交互_java类库web3j开发以太坊智能合约快速入门

    web3j简介 web3j是一个轻量级.高度模块化.响应式.类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成. 可以通过它进行以太坊 ...

  5. spring boot 快速入门

    文章来源:https://www.cnblogs.com/junyang/p/8151802.html spring boot入门 -- 介绍和第一个例子 "越来越多的企业选择使用sprin ...

  6. 【720开发】 spring boot 快速入门

    spring boot 快速入门 通过构建简单的REST应用,了解spring boot的开发基本流程,验证其简单.易用特性. 环境要求 Spring Boot 2.0.0.BUILD-SNAPSHO ...

  7. 京东必考JVM 问题诊断快速入门

    JVM 问题诊断快速入门 JVM 全称为 Java Virtual Machine,翻译为中文 "Java 虚拟机".本文中的JVM主要指 Oracle 公司的 HotSpot V ...

  8. MyBatis-Plus快速入门-(干货满满+超详细)

    文章目录 一.MyBatis VS JPA 二.MyBatis-Plus简介 三.MyBatis-Plus快速入门 1.lombok简介及安装 2.入门小案例 四.基本使用 1.通用传统模式简介及通用 ...

  9. JDK8函数式编程快速入门干货

    Java8引入函数式编程,极大地提高了编码效率,对于习惯了原有Java代码风格的coder,确实需要好好熟悉一番才能熟练地coding. 本文每一条讲解都配置了最简短的代码,适合快速入门或者字典使用, ...

最新文章

  1. Java对象转换成JSON对象/JSON对象转换成JSON字符串/JSON字符串转换成JS对象
  2. PHPweb应用程序开发技巧
  3. 第五章--数据库中间层实现读写分离
  4. 敏捷开发“松结对编程”实践之五:代码检查篇(大型研发团队,学习型团队,139团队,师徒制度,代码审查)...
  5. An internal error occurred during: Retrieving archetypes:. GC overhead limit exceeded
  6. IO复用与select函数
  7. github项目提交失败 master - master (non-fast-forward)
  8. net core 模型绑定与之前版本的不同-FromBody 必须对应Json格式
  9. neo4j---学习笔记
  10. 免费领,单片机入门到高级进阶学习攻略(附教程+工具)
  11. 破解intelliJ idea 2017
  12. f2fs存储结构初探
  13. 编译安装cacti-spine
  14. 《Python程序设计(第3版)》[美] 约翰·策勒(John Zelle) 第 9 章 答案
  15. Linux之创建组名和删除组名
  16. MATLAB和Python求解非线性常微分方程
  17. 小宝贝腾讯,以为只是改了小程序的授权机制,没想到公众号也改了!
  18. Shiro使用和原理分析---2
  19. mysql数据库之ddl语句盘点
  20. dubbo的常用容错机制

热门文章

  1. 小而美的个人博客——后端——管理页面
  2. php mb strimwidth,wordpress截断函数mb_strimwidth()失效的解决方法
  3. python中系列的含义_一篇文章让你彻底搞清楚Python中self的含义
  4. 怎么看空调定时成功_风管机和中央空调傻傻分不清?看了你就明白怎么选了
  5. Windows下Socket库的初始化和关闭
  6. 双任务延时原理与空闲任务
  7. python运用范围_如何在python中使用某个范围对数字列表进行分组?
  8. 计算机组成知识试题及答案,《计算机组成与结构复习题及答案.doc
  9. 计算机换色带技巧,色带盒怎么更换 色带盒更换安装方法【图文教程】
  10. lzw编码过程详解_编码拓展——封装、编码、码率