Java Lambda 表达式讲解

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);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557384.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

方法引用、构造器引用和数组引用

方法引用 若 Lambda 体中的内有方法已经实现了&#xff0c;我们可以使用“方法引用”&#xff08;可以理解为方法引用是 Lambda 表达式的另外一种表现形式&#xff09; 语法格式 主要有以下三种语法格式&#xff1a; 对象&#xff1a;&#xff1a;实例方法名 注意&#xff1…

JVM 学习一:JVM 的构架模型及生命周期

JVM 的架构模型 Java 编译器输入的指令流基本上是一种基于栈的指令集架构&#xff0c;另外一种指令集架构则是基于寄存器的指令集架构。 具体来说&#xff0c;这两种架构之间的区别&#xff1a; 基于栈式架构的特点&#xff1a; 设计和实现更简单&#xff0c;适用于资源受限…

JVM 学习二:类加载器子系统

1 类加载器子系统的作用 类加载器子系统负责从文件系统或者网络中加载 Class 文件&#xff0c;Class 文件在文件开关有特定的文件标识ClassLoader 只负责 Class 文件的加载&#xff0c;至于它是否可以运行&#xff0c;则由 Execution Engine&#xff08;执行引擎&#xff09;决…

JVM 学习三:类加载器

类加载器 1 类加载器的分类 JVM 支持两种类型的类加载器&#xff1a;引导类加载器&#xff08;Bootstrap ClassLoader&#xff09;和自定义类加载器&#xff08;User-Defined ClassLoader&#xff09; 从概念上来讲&#xff0c;自定义类加载器一般指的是程序中由开发人员自定…

JVM 学习四:类加载之双亲委派机制与沙箱安全机制

1 双亲委派机制 Java 虚拟机对 Class 文件的加载采用的是按需加载的方式&#xff0c;也就是说&#xff1a;当需要使用该类时才会将它的 Class 文件加载到内存生成 Class 对象&#xff0c;而且加载某个类的 Class 文件时&#xff0c;Java 虚拟机采用的是双亲委派模式&#xff0c…

数据结构之线性表:顺序线性表 Java 实现(底层基于数组)

代码实现 package top.gldwolf.java.datastructure.lineartable;/*** 顺序线性表* param <T> 存储的元素类型*/ public class LinearTable<T> {private static final int INITIAL_SIZE 20; // 线性表的初始容量private Object[] data null; // 真正存储数据的数…

Java8新特性:Stream介绍和总结

Java8新特性&#xff1a;Stream介绍和总结 什么是Stream 流&#xff08;Stream&#xff09;是数据渠道&#xff0c;用于操作数据源&#xff08;集合、数组等&#xff09;所生成的元素序列。 集合讲的是数据&#xff0c;流讲的是计算 注意&#xff1a; Stream自己不会存储元素…

数据结构之线性表:单链表

代码实现 package top.gldwolf.java.datastructure.linkedtable;/*** author: Gldwolf* email: ZengqiangZhaosina.com* date: 2020/4/15 12:39*//*** 线性表的链式存储结构** param <T> 存储的数据类型*/ public class LinkedTable<T> {private Node head new N…

使用 Akka 实现 Master 与 Worker 之间的通信

MessageProtocol.scala package top.gldwolf.scala.akkademo.sparkmasterandworker.common/*** author: Gldwolf* email: ZengqiangZhaosina.com* date: 2020/4/17 10:54*//*** 用于 Work 注册时发送注册信息*/ case class WorkerRegisterInfo(id: String, cpu: Int, ram: Int…

URL传Base64 造成报错 Illegal base64 character 20

报错如下&#xff1a; errorInternal Server Error, messageIllegal base64 character 20, tracejava.lang.IllegalArgumentException: Illegal base64 character 20 at java.util.Base64Decoder.decode0(Base64.java:714)atjava.util.Base64Decoder.decode0(Base64.java:714) …

Linux 中使用 sort 指令分组排序详解

Linux 中使用 sort 指令分组排序详解 sort 中进行分组排序主要用到的选项为 -k&#xff0c;此文&#xff0c;我们着重于该选项的使用方式&#xff0c;用到的其它选项不做解释&#xff0c;有兴趣的同学可以查看帮助文档 1. 数据准备 现有数据如下&#xff0c;文件名 sort_so…

Shiro-单点登录原理

单点登录原理 一、单系统登录机制 1、http无状态协议 web应用采用browser/server架构&#xff0c;http作为通信协议。http是无状态协议&#xff0c;浏览器的每一次请求&#xff0c;服务器会独立处理&#xff0c;不与之前或之后的请求产生关联&#xff0c;这个过程用下图说明…

关于 Java 同名类加载顺序问题排查方案

排查背景 最近在生产上部署 UDF 时&#xff0c;遇到一个两个环境完全相同&#xff0c;但是一个客户端报错另一个正常的情况&#xff0c;经过多次调试问题终于得以解决&#xff0c;现将解决思路记录一下&#xff0c;希望能对后来者有所帮助。(生产环境不便于截图。。。暂不展示…

Arrays.asList() 详解

Arrays.asList() 详解 【1. 要点】 该方法是将数组转化成List集合的方法。 List list Arrays.asList(“a”,“b”,“c”); 注意&#xff1a; &#xff08;1&#xff09;该方法适用于对象型数据的数组&#xff08;String、Integer…&#xff09; &#xff08;2&#xff0…

Vim 编码问题详解

Vim 编码问题详解 vim 中有 4 个与编码相关的配置&#xff0c;分别是 encoding、termencoding、fileencoding 和 fileencodings。在实际使用中任何一个配置有问题都可能会导致乱码&#xff0c;因此我们应该清楚每个配置的含义。 1. encoding encoding 是 vim 内部使用的字符编…

@Autowired作用在普通方法上

Autowired作用在普通方法上 Autowired作用在普通方法上&#xff0c;会在注入的时候调用一次该方法&#xff0c;如果方法中有实体参数&#xff0c;会对方法里面的参数进行装配&#xff0c;并调用一次该方法。这个可以用来在自动注入的时候做一些初始化操作。

@Autowired注解作用在方法上

Autowired注解作用在方法上 Autowired注解作用在方法上 &#xff08;1&#xff09;该方法如果有参数&#xff0c;会使用autowired的方式在容器中查找是否有该参数 &#xff08;2&#xff09;会执行该方法

spring定时任务的几种实现方式

spring定时任务的几种实现方式 一&#xff0e;分类 从实现的技术上来分类&#xff0c;目前主要有三种技术&#xff08;或者说有三种产品&#xff09;&#xff1a; Java自带的java.util.Timer类&#xff0c;这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让…

Spring定时任务

Spring定时任务(一)&#xff1a;SpringTask使用 背景&#xff1a;在日常开发中&#xff0c;经常会用到任务调度这类程序。实现方法常用的有&#xff1a;A. 通过java.util.Timer、TimerTask实现。 B.通过Spring自带的SpringTask。 C. 通过Spring结合Quartz实现。本文我们将讲述…

关于Spring 任务调度之task:scheduler与task:executor配置的详解

关于Spring 任务调度之task:scheduler与task:executor配置的详解 其实就是Spring定时器中配置文件中一些配置信息&#xff0c;由于笔者自己是头一次使用&#xff0c;有些配置详细不太明白&#xff0c;随即研究了一番&#xff0c;于是想记录一下&#xff0c;有需要的小伙伴可以…