Lambda 表达式

Lambda 表达式的基础语法

Java8 中引入了一个新的操作符:-> 该操作符称为箭头操作符或者 Lambda 操作符


Lambda 操作符将表达式拆分成两部分:

  • 左侧:Lambda 表达式的参数列表
  • 右侧: Lambda 表达式的"函数体" --> Lambda 体

语法格式 1:无参数,无返回值,且 Lambda 体中只有一条语句

() -> lambda 体

代码示例:

// 使用匿名内部类的方式
Runnable run = new Runnable() {@Overridepublic void run() {System.out.println("Hello world!");}
}
r.run();System.out.println("---------------------")// 使用 Lambda 的方式
Runnable runa = () -> System.out.println("Hello runnable!");
runa.run();

语法格式 2:有一个参数,无返回值,且 Lambda 体中只有一条语句

(x) -> Lambda 体

代码示例:

Consumer<String> consumer = (str) -> System.out.println(str);
consumer.accept("Hello world!");

语法格式 3:如果只有一个参数,无返回值,且 Lambda 体中只有一条语句,小括号可以省略不写

x -> Lambda 体

代码示例:

Consumer<String> consumer = str -> System.out.println(str);
consumer.accept("Hello world!");

语法格式 4:如果有两个及以上的参数,有返回值,且 Lambda 体中有多条语句

(x, y) -> { 表达式 1; 表达式 2; ...; return y - x; }

代码示例:

Comparator<Integer> comparator = (x, y) -> {System.out.println("x = " + x);System.out.println("y = " + y);return y - x;
}

语法格式 5:如果有两个及以上的参数,但是 Lambda 体中只有返回值一条语句,则 return 和 {} 都可以不写

(x, y) -> y - x

代码示例:

Comparator<Integer> comparator = (x, y) -> y - x;

语法格式 6: Lambda 表达式的参数列表的数据类型可以省略不写,因为 JVM 编译器会通过上下文进行推断,即“类型推断”


Lambda 表达式需要“函数式”接口的支持

函数式接口:接口中只有一个抽象方法的接口,称为函数式接口,可以使用 @FunctionalInterface 注解来进行标注

Java8 内置的四大核心函数式接口

Consumer :消费型接口 --> 一般用于消费传入的数据

void accept(T t);

Supplier : 供给型接口 --> 一般用于提供数据

T get();

Function<T, R> : 函数型接口 --> 一般用于对传入的数据进行处理,并返回处理后的结果

R apply(T t);

Predicate : 断言型接口 --> 一般用于判断传入的数据是否符合条件

boolean test(T t);

Java Lambda 表达式讲解相关推荐

  1. 深入理解Java Lambda表达式,匿名函数,闭包

    前言 对于Lambda表达式一直是知其然不知其所以然,为了搞清楚什么是Lambda表达式,以及Lambda表达式的用法和作用,本文应运而生当做学习笔记分享出来,欢迎指正交流. 什么是Lambda 让我 ...

  2. Java Lambda表达式入门

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

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

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

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

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

  5. Java Lambda表达式初探

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

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

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

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

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

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

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

  9. Java Lambda 表达式快速学习

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

最新文章

  1. Mysql中where条件一个单引号引发的性能损耗
  2. [阿里云Java Web环境搭建]二、Ubuntu安装JDK
  3. 数十种TensorFlow实现案例汇集:代码+笔记
  4. jupyter lab插件无法打开,且报错Error: 500 (Internal Server Error)
  5. 下载centos(阿里云)
  6. [洛谷P3919]【模板】可持久化数组
  7. IDEA安装mysql程序包,程序包的下载!以及程序包配置到项目详解(更适合英语小白)
  8. 海康VisionMaster算法平台介绍
  9. 稳健Capon波束形成
  10. [ROS2 基础] 仿真系统和搭建方法
  11. Linux NTP服务器配置
  12. html5富文本编辑器菜鸟手册,富文本编辑器froalaEditor(全面)附教程
  13. 加域电脑,如何脱域上网下载安装其他工具软件
  14. xp系统怎么添加wifi连接服务器,XP系统怎么连接无线路由器
  15. 串口服务器与协议转换器的区别,串口服务器和串口转以太网模块区别
  16. 在【此电脑】隐藏【设备和驱动器】中不需要的图标
  17. Python免费下载哔哩哔哩视频,只需一行代码!
  18. 浅谈《守望先锋》中的 ECS 构架
  19. 根域名服务器的一点理解
  20. 转黄老师的“告别信狮”书

热门文章

  1. getprivateprofilestring读不到数据_Tomcat NIO(11)请求数据读取
  2. Java FilterInputStream skip()方法与示例
  3. python里x.pow2_带有Python示例的math.pow()方法
  4. 为什么ConcurrentHashMap不允许插入null值?
  5. 列表使用与内部实现原理
  6. 经典面试题|讲一讲JVM的组成
  7. nodejs+nginx获取真实ip
  8. c语言指针灵活性管窥
  9. Linux debian安装Typora教程
  10. CentOS 7 搭建RAP2r Api文档管理系统