一、背景

Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。 Lambda 表达式(Lambda expression)可以看作是一个匿名函数,基于数学中的λ演算得名,也可称为闭包(Closure) 。

二、语法

Lambda表达式的语法

  • 基本语法: (parameters) -> expression 或 (parameters) ->{ statements; }

Lambda表达式由三部分组成:

  1. paramaters:类似方法中的形参列表,这里的参数是函数式接口里的参数。这里的参数类型可以明确的声明
    也可不声明而由JVM隐含的推断。另外当只有一个推断类型时可以省略掉圆括号。
  2. ->:可理解为“被用于”的意思
  3. 方法体:可以是表达式也可以代码块,是函数式接口里方法的实现。代码块可返回一个值或者什么都不反
    回,这里的代码块块等同于方法的方法体。如果是表达式,也可以返回一个值或者什么都不反回。
//1. 不需要参数,返回值为 2
() -> 2
// 2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x
// 3. 接受2个参数(数字),并返回他们的和
(x, y) -> x + y
// 4. 接收2个int型整数,返回他们的乘积
(int x, int y) -> x * y
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.print(s)

2.1、函数式接口

要了解Lambda表达式,首先需要了解什么是函数式接口,函数式接口定义:一个接口有且只有一个抽象方法 。

注意:

  1. 如果一个接口只有一个抽象方法,那么该接口就是一个函数式接口
  2. 如果我们在某个接口上声明了 @FunctionalInterface 注解,那么编译器就会按照函数式接口的定义来要求该接口,这样如果有两个抽象方法,程序编译就会报错的。所以,从某种意义上来说,只要你保证你的接口中只有一个抽象方法,你可以不加这个注解。加上就会自动进行检测的。

2.2、匿名类的简写(引出Lambda表达式)

三、Lambda表达式的基本使用

3.1、无返回值, 一个参数的函数式接口

3.2、无返回值,多个参数


本质上来说: sout 语句的花括号也可以省略,但是我那样更规范一点,要加什么也方便。
小括号就不能省略了,那是多个参数。

3.3、有返回值,无参数

3.4、有返回值,有一个参数

3.5、有返回值,多个参数

3.6、匿名内部类 - 变量捕获

3.7、Lambda 表达式捕获变量

Lambda 表达式中存在变量捕获 ,了解变量捕获之后,我们才能更好的理解Lambda 表达式的作用域 。Java的匿名类中,会存在变量捕获。

四、Lambda在集合当中的使用

为了能够让Lambda和Java的集合类集更好的一起使用,集合当中,也新增了部分接口,以便与Lambda表达式对接。

对应的接口 新增的方法
Collection removeIf() spliterator() stream() parallelStream() forEach()
List replaceAll() sort()
Map getOrDefault() forEach() replaceAll() putIfAbsent() remove() replace() computeIfAbsent() computeIfPresent() compute() merge()

4.1、Collection接口 - forEach() 方法演示

4.2、List接口 - sort()方法的演示

sort方法源码:该方法根据c指定的比较规则对容器元素进行排序。

4.3、Map接口

HashMap 的 forEach()

总结

Lambda表达式的优点很明显,在代码层次上来说,使代码变得非常的简洁。缺点也很明显,代码不易读。
优点:

    1. 代码简洁,开发迅速
    1. 方便函数式编程
    1. 非常容易进行并行计算
    1. Java 引入 Lambda,改善了集合操作

缺点:

    1. 代码可读性变差
    1. 在非并行计算中,很多计算未必有传统的 for 性能要高
    1. 不容易进行调试

Java - Lambda 表达式相关推荐

  1. Java Lambda表达式入门

    本文转自:http://blog.csdn.net/renfufei... 转载请注明出处 原文链接: Start Using Java Lambda Expressions 下载示例程序 Examp ...

  2. java拉姆达表达式事例,Java Lambda表达式详解和实例

    简介 Lambda表达式是Java SE 8中一个重要的新特性.lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体( ...

  3. Java Lambda表达式forEach无法跳出循环的解决思路

    Java Lambda表达式forEach无法跳出循环的解决思路 如果你使用过forEach方法来遍历集合,你会发现在lambda表达式中的return并不会终止循环,这是由于lambda的底层实现导 ...

  4. Java Lambda表达式初探

    前言 本文受启发于Trisha Gee在JavaOne 2016的主题演讲Refactoring to Java 8. Java 8已经发行两年多,但很多人仍然在使用JDK7.对企业来说,技术上谨慎未 ...

  5. Java Lambda 表达式(又名闭包 (Closure)/ 匿名函数 ) 笔记

    Java Lambda 表达式(又名闭包 (Closure)/ 匿名函数 ) 笔记 根据 JSR 335, Java 终于在 Java 8 中引入了 Lambda 表达式.也称之为闭包或者匿名函数. ...

  6. java lambda 表达式中的双冒号和箭头的用法 ::

    先构造一些数据,创建一个User类 java lambda 表达式中的双冒号的用法 :: 双冒号运算就是Java中的[方法引用],[方法引用]的格式是 类名::方法名 如下图所示 User是一个类, ...

  7. Lambda表达式的生动理解以及Java Lambda表达式常见使用场景

    本篇承接上一篇 Java Lambda 表达式快速学习 , 对Lambda 表达式的语法格式进行演化说明, 并对Java 中Lambda表达式的常见使用场景进行说明. Lambda 表达式怎么来的? ...

  8. Java Lambda 表达式快速学习

    Lambda 表达式来源于数学, 因为其简洁性,很多开发语言都支持, Java 在版本8 开始引入. Lamba 表达式是什么? 匿名内部类 接口只能有一个需要被实现的方法 Lamba 表达式作用 代 ...

  9. java lambda表达式 steam api

    java lambda表达式 steam api 案例使用 java版本为 jdk-17 foreach 遍历 public class JavaDemo03 {public static void ...

  10. 【外文翻译】外国友人写得很不错的Java Lambda表达式入门教程,我终于翻译好给大家啦!!!...

    " 英语原文的链接在最底下的"阅读原文" " 简介 (译者认为: 超过 3 行的逻辑就不适用 Lambda 表达式了.虽然看着很先进,其实 Lambda 表达式 ...

最新文章

  1. Ubuntu下安装Chrome浏览器
  2. window.open打开新窗口不改变原窗口_我P的图不高级,就很可耻吗?
  3. SpringBoot中整合Mail实现发送模板邮件
  4. java canvas画图,UWP Canvas绘图越界
  5. Spark技术内幕:Stage划分及提交源码分析
  6. c语言随机产生10个30 100,c语言编写随机产生10个100~200之间整数,幷按从大到小排序...
  7. 多行文本溢出显示省略号
  8. 嵌入式从硬件到Linux学习经验汇总-----By知乎
  9. 深度| 百度副总裁王海峰:百度在NLP领域都做了什么?
  10. 【图论·习题】同余最短路:跳楼机
  11. WebIM Vue Demo 使用文档
  12. 金额数字转换成大写,英文。111,壹佰壹拾壹元整,one hundred and eleven yuan
  13. 分布式的坑(队列、缓存、分库分表、事务)
  14. 100+大数据开源处理工具汇总
  15. 限流的方式,为什么要限流,怎么实现限流
  16. 21. 程序员生存定律-选公司前要干的事:分类
  17. D. Epic Transformation
  18. 第一章创业、创业精神与人生发展
  19. HTTP概述【HTTP权威指南-翻译-第一章】
  20. java实现第二届蓝桥杯四方定理

热门文章

  1. KBS投搞Building PDF之后出现Error
  2. 模电专题-比较器要不要接正反馈
  3. 【MCU】用stm32的UID给固件加密(重点在加密)
  4. 有彭友问:DCMM怎么过5级?我给他看了几个数据..
  5. vue使用中国天气插件
  6. 中国正建全球最强人脸识别系统,3 秒内识别身份
  7. Win10系统安装的Ubuntu LTS密码强制更换
  8. 【教你用傻瓜式免费软件做好本本电池监测】
  9. 前缀 中缀 后缀表达式2
  10. 财管公式计算机哪个是开平方,中级会计机考问题:财管怎么写公式?没有计算器怎么办...