Java Lambda 表达式笔记

Java8学习笔记(二)—— Lambda表达式 Java8学习笔记系列: Java8学习笔记(一)—— 函数式编程的四个基本接口 Java8学习笔记(二)—— Lambda表达式 Java8学习笔记(三)—— Optional类的使用 Java8学习笔记(四) —— Stream流式编程 Java8学习笔记(五)—— 方法引用(::双冒号操作符) 一、什么是Lambda表达式 Lambda是Java8的一个语法糖,... 阅读详情

Java Lambda 表达式

Lambda 表达式,也可称为闭包.
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

Lambda表达式的主要特点包括:

  • 匿名性:Lambda表达式没有显式的名称,因此可以被当做一种匿名函数使用。
  • 简洁性:Lambda表达式可以大大减少代码的冗余,使代码更加简洁。
  • 传递性:Lambda表达式可以作为参数传递给方法,从而实现更灵活的代码组织。

语法

lambda 表达式的语法格式如下:

(parameters) -> expression
或
(parameters) ->{ statements; }

以下是lambda表达式的重要特征:

  • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
  • 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
  • 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
  • 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定表达式返回了一个数值。

使用 Lambda 表达式需要注意以下两点:

  • Lambda 表达式主要用来定义行内执行的方法类型接口(例如,一个简单方法接口)。在上面例子中,我们使用各种类型的 Lambda 表达式来定义 MathOperation 接口的方法,然后我们定义了 operation 的执行。

  • Lambda 表达式免去了使用匿名方法的麻烦,并且给予 Java 简单但是强大的函数化的编程能力。

Lambda 表达式实例

Lambda 表达式的简单例子:

// 1. 不需要参数,返回值为 5  
() -> 5  
  
// 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)

Lambda表达式与函数式接口

Lambda表达式通常与函数式接口(Functional Interface)一起使用。函数式接口是一个只包含一个抽象方法的接口。Lambda表达式可以使用这个抽象方法的签名来实现该接口,从而简化代码。

例如,Java标准库中的java.lang.Runnable就是一个函数式接口,它只包含一个void run()方法。我们可以使用Lambda表达式来创建Runnable对象:

Arrays.sort(arrays,
	(first,second)->first.length()-second.length());

方法引用

方法引用:使用操作符::将方法名和对象或类的名字分隔开来,三种主要使用情况为:

  • 对象::实例方法
  • 类::静态方法
  • 类::实例方法
// 实例方法引用
list.forEach(e->{System.out.println(e);});
list.forEach(System.out::println);

// 静态方法
list.stream().reduce(Math::max);

// 实例方法
people=stream.toArray(Person[]::new);

处理lambda表达式的接口

函数式接口参数类型返回类型抽象方法名描述其他方法
Runnable无voidrun作为无参数或返回值的动作执行
Supplier<T>无Tget提供一个T类型的值
Consumer<T>Tvoidaccept处理一个T类型的值addThen
BiConsumer<T,U>T,Uvoidaccept处理T和U类型的值addThen
Function<T,R>TRapply有一个T类型参数的函数compose,addThen,idenity
BiFunction<T,U,R>T,URapply有T和U类型参数的函数addThen
UnaryOperator<T>TTapply类型T上的一元操作符compose,addThen,identity
BinaryOperator<T>T,TTapply类型T上的二元操作符addThen,maxBy,minBy
PreDicate<T>Tbooleantest布尔值函数add,or,negate,isEqual
BiPredicateT,Ubooleantest有两个参数的布尔值函数add,or,negate

Java Lambda 表达式

Lambda 表达式,也可称为闭包.
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

Lambda表达式的主要特点包括:

  • 匿名性:Lambda表达式没有显式的名称,因此可以被当做一种匿名函数使用。
  • 简洁性:Lambda表达式可以大大减少代码的冗余,使代码更加简洁。
  • 传递性:Lambda表达式可以作为参数传递给方法,从而实现更灵活的代码组织。

语法

lambda 表达式的语法格式如下:

(parameters) -> expression
或
(parameters) ->{ statements; }

以下是lambda表达式的重要特征:

  • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
  • 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
  • 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
  • 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定表达式返回了一个数值。

使用 Lambda 表达式需要注意以下两点:

  • Lambda 表达式主要用来定义行内执行的方法类型接口(例如,一个简单方法接口)。在上面例子中,我们使用各种类型的 Lambda 表达式来定义 MathOperation 接口的方法,然后我们定义了 operation 的执行。

  • Lambda 表达式免去了使用匿名方法的麻烦,并且给予 Java 简单但是强大的函数化的编程能力。

Lambda 表达式实例

Lambda 表达式的简单例子:

// 1. 不需要参数,返回值为 5  
() -> 5  
  
// 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)

Lambda表达式与函数式接口

Lambda表达式通常与函数式接口(Functional Interface)一起使用。函数式接口是一个只包含一个抽象方法的接口。Lambda表达式可以使用这个抽象方法的签名来实现该接口,从而简化代码。

例如,Java标准库中的java.lang.Runnable就是一个函数式接口,它只包含一个void run()方法。我们可以使用Lambda表达式来创建Runnable对象:

Arrays.sort(arrays,
	(first,second)->first.length()-second.length());

方法引用

方法引用:使用操作符::将方法名和对象或类的名字分隔开来,三种主要使用情况为:

  • 对象::实例方法
  • 类::静态方法
  • 类::实例方法
// 实例方法引用
list.forEach(e->{System.out.println(e);});
list.forEach(System.out::println);

// 静态方法
list.stream().reduce(Math::max);

// 实例方法
people=stream.toArray(Person[]::new);

处理lambda表达式的接口

函数式接口参数类型返回类型抽象方法名描述其他方法
Runnable无voidrun作为无参数或返回值的动作执行
Supplier<T>无Tget提供一个T类型的值
Consumer<T>Tvoidaccept处理一个T类型的值addThen
BiConsumer<T,U>T,Uvoidaccept处理T和U类型的值addThen
Function<T,R>TRapply有一个T类型参数的函数compose,addThen,idenity
BiFunction<T,U,R>T,URapply有T和U类型参数的函数addThen
UnaryOperator<T>TTapply类型T上的一元操作符compose,addThen,identity
BinaryOperator<T>T,TTapply类型T上的二元操作符addThen,maxBy,minBy
PreDicate<T>Tbooleantest布尔值函数add,or,negate,isEqual
BiPredicateT,Ubooleantest有两个参数的布尔值函数add,or,negate
Java学习笔记——lambda表达式 Lambda表达式在Java中的核心应用 摘要:Lambda表达式是Java 8引入的函数式编程特性,通过简洁语法(参数)->表达式实现匿名函数。它能替代匿名内部类,支持行为参数化,配合函数式接口(如Predicate、Function)使用。Lambda与Stream API结合可实现高效数据处理,其优势包括代码简洁、可读性强、并行友好和延迟执行。高级特性涵盖方法引用、类型推断和嵌套Lambda。典型应用场景包括集合操作、事件处理和构建流畅API。异常处理需特别关注,常见解决方案包括内部try-ca 阅读详情

相关推荐

Java讲课笔记17:Lambda表达式

1. 理解Lambda表达式的作用 2. 掌握Lambda表达式的操作(遍历、过滤、提取)

howard2005的专栏 2214

【Java笔记】Lambda表达式

Lambda表达式是Java函数式编程的核心概念之一,是一种语法糖用于简化实现函数式接口Functional Interface。

Hansdas的博客 2109

【VAE学习笔记】全面通透地理解VAE(Variational Auto Encoder)

完整笔记:http://www.gwylab.com/note-vae.html 李宏毅老师的教程视频:https://www.bilibili.com/video/av15889450/?p=33 —————————————————————————————————   依据李宏毅老师的讲解,我整理了一番VAE的笔记。先简单介绍一下VAE,VAE作为一个生成模型,其基本思路是很容易理解的:把一堆真...

a312863063的博客 14万+

java8 lambda python_【学习笔记】java8 Lambda表达式语法及应用

本文是慕课网大牧莫邪老师的视频教程一课掌握Lambda表达式语法及应用的学习笔记。如果觉得内容对你有用,可以购买老师的课程支持一下,课程价格1元,十分良心了。1. 课程介绍2. 为什么引入Lambda表达式2.1 什么是Lambda表达式Lambda表达式也称箭头函数、匿名函数、闭包Lambda表达式体现的是轻量级函数式编程思想-> 符号是Lambda表达式核心操作符号,符号左侧是操作参数,...

weixin_39612677的博客 269

STM32F0实现数字化SPWM纯正弦波逆变器

这个没啥好说的,搭电路的事。其核心思想是两边桥臂分别由两个180度相位差的正弦波与三角载波比较来控制,优点是在开关器件工作频率一样的情况下,输出PWM频率是单极性SPWM的2倍,能够明显减少谐波,因此只需要相对较小的电感和电容滤波器件就可以起到很好的滤波效果,提升了系统的性能,也精简了系统体积,降低了成本。而双极性pwm则是在整个正弦周期内,四只管子都在高频开关状态工作,对角线上的管子一起导通,另一对角线上管子互补导通,实际上只需要一路互补的PWM控制,负载上电压在正电压和负电压之间切换,不出现0v。

forlifefor的专栏 1万+

Tomcat启动过程中cmd窗口(控制台)中文乱码的问题

tomcat启动时,启动过程日志中文乱码的处理方法。

寻码启示 1946

java8学习笔记-Lambda表达式

Lambda 表达式是一个匿名函数(指的是没有函数名的函数),直接对应于其中的 Lambda 抽象,Lambda 表达式可以表示闭包。我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码作为实参),也可以理解为函数式编程,将一个函数作为参数进行传递。可以直接引用Java类或对象的方法,它可以被看成是一种更加简介易懂的Lambda表达式,使用方法引用后,代码可以更加简洁的编写。可以看到 (Global a, Global b) 可以省略Global 类型变成 (a, b)

nimqbiyq的博客 390

RedVQA:轻量级无参考视频质量评估算法原理与工程实践

视频质量评估是计算机视觉领域的关键技术,旨在通过算法自动量化视频的观看体验。其核心原理在于模拟人眼视觉系统,从像素数据中提取并融合空域和时域特征,以预测主观质量分数。这项技术的价值在于,它能自动化处理海量视频内容的质量监控,为流媒体服务、移动设备影像优化等场景提供关键指标。无参考视频质量评估作为该领域的前沿方向,无需原始无损视频作为参考,更贴合实际应用。本文以RedVQA项目为例,深入剖析了如何利用轻量化的深度网络架构,如MobileNetV3,结合高效的时空特征融合模块,在保证评估精度的同时,大幅降低计算

weixin_28698129的博客 576

【java笔记】lambda表达式

java 学习笔记-lambda表达式 介绍 带有参数的表达式,解决代码冗余的问题 举例 用匿名内部类和lambda表达式完成相同的排序问题 匿名内部类 import java.math.BigInteger; import java.util.*; class Son{ private Integer age; private String name; public ...

我不喜欢吃氧化亚铁的博客 204

Python实现FFT、小波变换和数据压缩

小波变换是一种分析信号的方法,可以分解信号成为多个尺度和频率的分量,从而更好地理解和处理信号。在Python中,我们可以使用pywt库来实现小波变换。在Python中,我们可以使用numpy库中的fft模块来实现FFT。数据压缩是一种将数据表示成更紧凑的形式的方法,可以减少存储空间和传输带宽。综上所述,Python提供了很多方便的工具来实现各种信号处理和数据压缩的方法。本文将介绍Python中如何实现傅里叶变换(FFT)、小波变换以及如何使用它们来进行数据压缩。Python实现FFT、小波变换和数据压缩。

学习使你进步。 694

12、有杆泵抽油系统:原理、性能与选择

本文全面介绍了有杆泵抽油系统的原理、性能分析和设备选择方法。有杆泵抽油系统广泛应用于石油开采领域,通过地面抽油装置与井下柱塞泵的配合,实现高效、稳定的原油提升。文章详细解析了系统的工作原理、组成结构、光杆运动特性、载荷计算、泵输送能力及功率需求,并提供了抽油装置的选择流程和实际案例分析。此外,还探讨了泵的容积效率影响因素、示功图的作用及系统优化运行的建议,为石油开采工程提供了理论支持和实践指导。

gan8painter的博客 435

java 8 lambda 函数_「Java 8 函数式编程」读书笔记——lambda表达式

本文是「Java 8 函数式编程」第二章的读书笔记。Lambda引入的变化Lambda表达式,是一种紧凑的、传递行为的方式,从编程思想上来讲,就是代码即数据。过去的Java中,存在大量的匿名内部类的使用,会新建一个匿名内部类传入调用的方法中。这种传统的方式,会造成冗余的、不易阅读的代码。于是Lambda诞生了。Lambda的语法简化了使用匿名内部类时的模板代码,让程序员专注于编写想要执行的行为,也...

weixin_31787977的博客 175

osgPython

osgPython是一组 Python 模块,为 OpenSceneGraph 的 C++ 库提供了完整的 Python 接口。这意味着你可以在 Python 中调用几乎所有的 OSG 功能,从创建简单的场景到复杂的渲染效果。核心优势开发速度快:Python 语法简洁,无需编译,快速迭代易于学习:比 C++ 更易上手,适合原型开发和教学生态丰富:可以结合 NumPy、Matplotlib 等科学计算库跨平台:与 OSG 一样支持 Windows、Linux、macOS性能考虑。

深之JohnChen的专栏 459

Java笔记——lambda表达式

介绍了java中lambda表达式的用法与性质。

weixin_41399650的博客 475

SAP-ABAP:SAP信贷管理核心:CL_UKM_BUPA_FACTORY类完整解析与实践指南

SAP信贷管理核心类CL_UKM_BUPA_FACTORY解析 CL_UKM_BUPA_FACTORY是SAP信贷管理(UKM)模块的核心类,作为业务伙伴信贷数据的中央控制台,它提供: 统一入口:标准化实例化客户/供应商信贷对象 主要功能: 获取单条/批量业务伙伴数据 安全保存数据变更 封装底层数据访问逻辑 典型应用场景: 信贷主数据批量维护 自动化限额调整 订单信贷实时检查 性能优化建议: 使用批量方法替代循环单条处理 合理设置字段选择 实施缓存策略 该类通过简洁API简化复杂信贷操作,是SAP信贷管理开

baidu_35680696的博客 1209

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

一些java lambda表达式的笔记

666

Ringo Eater的博客 858

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java笔记之lambda表达式

lamCbda表达式 (一)Lambda表达式概述 以前调用Java方法时,实参必须是一个进本数据类型或者是一个对象,现在可以给一些引用数据的形参,传“一段代码”,而不是“一个对象”。这段代码是一个函数(方法)的方法体。 Lambda表达式可以极大的减少代码的冗余,同时可读性也好过冗长的匿名类 引入函数式风格,但并不是所有的接口都可以运用lambda表达式,只有实现SAM(single abstr...

Sober_Kris的博客 211

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java学习笔记一Lambda表达式

Lambda表达式支持将代码块作为方法参数,Lambda允许使用更简洁的代码来创建只有一个抽象方法的接口(称为函数式接口)的实例。 三部分:形参列表允许省略形参类型,如果形参列表中只有一个参数,甚至连形参列表的圆括号也可省略。箭头,必须通过英文中画线和大于符号组成。代码块,只包含一条语句的话,允许省略代码块的花括号。只有一条return语句,可省略return关键字。 public class C...

肥叔菌的博客 9006

Java笔记——Lambda表达式

今天在腾讯课堂看马士兵老师的课时,遇到如下问题,运用多线程交替输出1A2B3C…26Z,其中提到一个新名词:Lambda表达式。 import java.util.concurrent.locks.LockSupport; public class TestLockSupport { public static Thread t1 = null; public static Thread t2...

zerosom的博客 152

Java:lambda表达式笔记

匿名内部类常用于子类需要调用父类中的某个方法,但是要求功能不同,这时我们会将父类中的方法定义成抽象方法,同时将父类定义成抽象方法,通过子类对其进行重写,再定义对象去调用,匿名内部类省去了先重写再创建对象再调用的繁琐过程。但是这里有一个问题,就是上面定义的类不满足lambda表达式的前提,即:被简化的匿名内部类必须是函数式接口。可以看出,使用匿名内部类明显方便许多,二lambda表达式则是在匿名内部类的写法上再进一步简化。格式: (被重写方法的形参列表)->{被重写方法的方法体。匿名内部类:new(){

2301_81294700的博客 1258

关于Java8 Lambda表达式的笔记

Java8 Lambda表达式 为什么要引入Lambda表达式 简单说,引入lambda表达式就是为了简化代码,允许将函数作为一个方法的参数传递进方法中; 回顾一下Java8以前,如果想把某个接口的实现类作为参数传递给一个方法会怎么做?要么创建一个类实现该接口,然后new出一个对象,在调用方法时传递进去,要么使用匿名类,可以精简一些代码。以创建一个线程并打印一行日志为例,使用匿名函数写法如下: n...

spring_zhangH的博客 191

JAVA学习笔记——Lambda 表达式

目录引入表达式语法函数式接口方法引用和构造器引用方法引用构造器引用变量作用域处理 lambda 表达式 引入 Lambda表达式是一个可传递的代码块,可以在以后执行一次或多次。在 Java 中传递一个代码段并不容易,不能直接传递代码段。Java 是一种面向对象语言,所以必须构造一个对象,这个对象的类需要有一个方法能包含所需的代码。 在其他语言中,可以直接处理代码块。Java 设计者很长时间以来一直拒绝增加这个特性。毕竟,Java 的强大之处就在于其简单性和一致性。如果只要一个特性能够让代码稍简洁一些,就把这

weixin_43410001的博客 595

笔记整理:Java中的Lambda表达式

1. 【Lambda表达式】把一段代码赋值给变量aBlockOfCode吗? 首先,Lambda表达式是在Java 8之后才出现的新特性,所以有时候我们看到类似这样形式的代码片段,一开始都会一头雾水,不知道是什么意思? 在Java 8之前,这样的骚操作是做不到的,以为,在Java中,变量我们一般都是给它赋的是一个“值”,像这样的 而不是一段代码,并且这段代码还跟平时我们写的有些不同,我们知道 System.out.println(s) 是输出打印一个字符串s , 但是 ()- > 是什么

国服酱紫牙 672

Java Lambda表达式笔记

Lambda 表达式 概述 使用 Lambda 表达式的前提是必须有相应的函数接口。函数接口是指内部仅有一个抽象方法的接口。 Lambda 表达式语法形式: (参数列表)->{ //表达式语句 } 常见用法 无参函数简写 如果需要新建一个线程,匿名内部类写法: new Thread(new Runnable(){// 接口名 @Override public void run(){// 方法名 System.out.println("Thread run()"); } }).start(

Prevernae的博客 261
上一篇: 单例模式 rust和java的实现
下一篇: 原型模式 rust和java的实现
过去日记
过去日记 新星创作者: 后端开发技术领域 新星创作者: 后端开发技术领域
博客等级 码龄3年 5343粉丝 225原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

过去日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值