Java学习-Lambda表达式

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

一、概述
1. lambda表达式:是一个可传递的代码块, 可以在以后执行一次或多次。
2. lambda命名来源:逻辑学家 Alonzo Church使用小写的希腊字母 λ(lambda )来标记参数,从那以后带参数变量的表达式就被称为 lambda 表达式。
3. lambda语法:

3.1 常规的调用:不能直接传递代码块给caller处理,需要构造包含某种方法的对象来间接传递此代码块,在Java8后也设计了一种可以直接将代码块传递给caller的方式就是Lambda表达式;

//Comparator<String>的实现类LengthComparator(看成一个代码块)
class LengthComparator implements Comparator<String>
{
	public int compare(String first, String second)
	{
	return first.length() - second.length();
	}
}
//当sort需要调用上面的接口代码块,常规做法是传递进来其实例化对象;
Arrays.sort(strings, new LengthComparator());

3.2 Lambda表达式格式:参数 -> 表达式

//格式:参数 -> 表达式
(String first,String second) -> first.length() - second.length()

//如果编译器根据上下文可以推导出一个lambda表达式的参数类型,则可以忽略不写其类型
Comparator<String> comp = (first, second) -> first.length() - second.length();

//如果方法只有一个参数, 而且这个参数的类型可以推导得出,那么还可以省略小括号()
Comparator<String> comp = first -> first.length();

//无参数必须要用()空括号,有多个语句要放进一个表达式中用{}约束,也可以在里面使用return语句(跟写方法一样)
() -> {for(int i=0;i<20;i--) System.out.println(i);}

//实际应用:也可以直接将lambda表达式写进去作为接口传递
Arrays.sort(strings, (first, second) -> first.length() - second .length());
Arrays.sort(strings, comp);

二、 函数式接口(functional interface )

1. 概念 :一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
2. 作用:函数式接口可以被隐式转换为 lambda 表达式,那么就可以使用Lambda表达式来表示该接口的一个实现(注:JAVA 8 之前一般是用匿名类实现的)。
在这里插入图片描述
3. 注意:
实际上在 Java 中, 对 lambda 表达式所能做的也只是能转换为函数式接口;
lambda表达式不可以赋值给 非函数式接口类型变量,比如Object类型变量;
4. 示例:

在这里插入代码片

三、方法引用
格式: 用:: 操作符分隔方法名与对象或类名,有下面3种情况;

1.引用对象的方法 object::instanceMethod

//out是一个PrintStream打印流对象,println是其一个打印方法
System.out::println 等价于 x -> System.out.println(x)

2.引用静态方法 Class::staticMethod

//pow()方法是Math类的静态方法,类可以直接调用
Math::pow 等价于(x,y) -> Math.pow(x, y)

3.引用容器中对象的方法 Class::instanceMethod

//toLowerCase()是String类中的转小写方法
String::toLowerCase 等价于 s -> s.toLowerCase()

四、构造器引用
1.格式:构造器引用与方法引用很类似,只不过方法名为 new;

//Person无参构造器的引用
Person::new 等价于 () -> new Person()

//int[] 数组构造器的引用,初始一个长度为x的参数
int[]::new 等价于 x -> new int[x]

2.注意:
Java 有一个限制,无法构造泛型类型 T 的数组;

五、变量作用域
在 lambda 表达式中访问外围方法或类中的变量
lambda 表达式可以捕获外围作用域中变量的值。在 Java 中,要确保所捕获的值是明确定义的,这里有一个重要的限制。在 lambda 表达式中, 只能引用值不会改变的变量;

PTA 编程题(C语言)-- 然后是几点 PTA 编程题(C语言)-- 然后是几点 阅读详情

相关推荐

【DAB收音机】DAB 认证介绍

DAB 认证ESTI 标准文档: ETSI 103461实际过认证时,需要根据产品的受众国家及区域,参考当地官方是否有国内认证协议。需要参考当地文档进行功能开发。例如:阿联酋地区用《UAE.S 5021 _ 2018.pdf》标准进行认证。ESTI 的DAB认证协议规定了家用和车载数字无线电的最低要求,及其对应的测试方法,是数字无线电认证标志规定的技术基础。本文以车载数字无线电接收器为例,进行部分DAB认证的介绍,详情请见官方文档。或联系博主获取DAB ESTI 103461的中文翻译资料。

qq_15271231的博客 1219

Java中Lambda表达式学习

Java中Lambda表达式学习 ​ 上一篇博客了解了线程的相关学习,学习的过程中看到一个注解@FunctionalInterface,本次的博客就来学习一下函数式接口。函数式接口可以用Lambda来创建,所以函数式接口的学习应该在Lambda表达式前面。 ​ 先来看一下函数式接口的文档定义: 可以发现几个重要的点: 函数式接口只有一个抽象方法。 默认方法和覆盖方法都不计入抽象方法数目。 可以用Lambda表达式、方法引用、构造函数引用来创建函数式接口实例。 注解并不一定是必须的,只要符合要求,编译器会

qq_38533859的博客 542

IDEA系列(四):IDEA导入Maven工程项目并配置Tomcat启动

本片文章主要介绍如何导入一个存在的maven项目并配置Tomcat启动项目,方便自己使用,也分享出来,希望可以帮助到其他人。

低调D树苗的博客 1243

java学习之路--lambda表达式

1.1 为什么引入lambda表达式 lambda表达式是一个可传递的代码块,可以在以后执行一次或多次。我们先观察一下在Java中的哪些地方用过这种代码块。 在接口那一节中,已经了解如何按照指定时间间隔完成工作。将这个工作放在ActionListener的actionPerformed方法中: class Worker implements ActionListener { publ...

m0_38088392的博客 245

爬虫小例--爬药监局(上)

”明月如霜,好风如水,清景无限 “ 文远最近也算是爬虫入门吧,相信后面会慢慢熟悉。 壹 直接上例子,爬取药监局的数据。目的是得到每家公司的详情数据,例: 具体网址:http://scxk.nmpa.gov.cn:81/xk/ 这是主页,下面详情信息: 贰 分析,通过网页检查发现,主网页上没有公司相关数据,观察XHR中的Ajax请求发现,公司信息都是动态数据(方便更新),点击发现每个公司 的详情信息通过ID号这个参数区别,那么可以确定思路是先得到每个公司的ID号,然后在通过ID对应每一个详细网站,同样右键

john_ashley的博客 4556

从零构建生产级K8s-v1.35.0集群:基于Containerd与Cilium的kubeadm实战指南

本文详细介绍了从零构建生产级K8s-v1.35.0集群的全过程,涵盖环境准备、Containerd配置、Kubernetes组件安装、集群初始化及Cilium网络部署等关键步骤。通过实战经验分享系统调优技巧和常见问题解决方案,帮助读者快速搭建稳定高效的Kubernetes集群。

weixin_28725553的博客 219

31.1 Java进阶之lambda表达式基本概念,语法

lambda表达式是一个可传递的代码块,可以在以后执行一次或多次,也就是说,它能让我们无需新建类就能定义方法并执行,得到我们想要的参数。i < 10;i ++) {}其中() -> {i < 10;i ++) {} }这部分就是一个lambda表达式的代码块,他能直接作为参数传入方法中,而不用去建一个类,然后创建类的实例去传入方法中。lambda表达式能让编程更加简洁。

c1776167012的博客 282

【coze实战】基于Coze的公众号图文自动化生成工作流实战解析

【coze实战】基于Coze的公众号图文自动化生成工作流实战解析

大家好,我是码农老gou,一名专注于编程技术的程序员。在这个博客中,我将与大家分享我在工作和学习中的经验、见解以及一些实用的技术干货。 1万+

Java中Lambda表达式的使用

此笔记仅用作复习使用:https://www.cnblogs.com/franson-2016/p/5593080.html Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。 Lambda表达式还增强了集合库。...

程序员的博客 6万+

空心杯电机在美容仪器中的应用:为什么你的洗脸刷动力这么强?

本文深入解析了空心杯电机如何成为高端美容仪器的核心动力源。通过对比传统电机,揭示了其无铁芯、低惯量、零齿槽效应的技术优势,从而实现了强劲动力、极致静音与细腻震动的用户体验。文章详细阐述了空心杯电机在洁面刷、导入仪等美容仪器中的具体应用与选型考量,并指出了开发中驱动匹配、测试等关键实战要点。

j2k3l4的博客 1013

Android 64位支持的坑:诡异的文件名问题

最近在尝试发布我的Android应用程序的更新时,遇到了一个令人困惑的64位错误。本文将详细讲解这个问题的产生原因及解决方法,供大家参考。

m0_74337424的博客 122

java8中stream将字符list转换大小写

List<String> lowCaseList = new ArrayList<>();lowCaseList.add("dog");lowCaseList.add("cat");lowCaseList.add("tiger");lowCaseList.add("lion"); List<String> upperCaseList...

apxl13666的博客 7761

大唐杯5G考前冲刺篇(回顾全文重点必看)

大唐杯习题复习指南

nimo观察者 1万+

【Java学习】Lambda表达式

本文详细讲解了 Lmabda表达式的简化原理、Lmabda表达式的简化条件、Lambda表达式的书写、Lambda表达式在函数式接口中的具体使用

Brookty的博客 1673

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Java学习:理解lambda表达式和forEach方法

本文重在梳理lambda表达式相关知识和其与foreach的结合原理

2303_80076499的博客 2599

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java 学习系列(11):Java Lambda 表达式与函数式编程

/ 使用 Lambda 表达式实现函数式接口// 输出:Hello, AliceLambda 表达式让 Java 代码更加简洁和灵活,尤其适用于处理集合、事件和流等操作。函数式接口是 Lambda 表达式的基础,Java 8 提供了许多常用的内置函数式接口。方法引用提供了一种简洁的 Lambda 表达式替代方式,使代码更加清晰。Stream API引入了函数式编程风格,可以让我们更轻松地进行数据流处理。

Azperk的博客 781

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Java Lambda 表达式快速学习

Lambda 表达式来源于数学, 因为其简洁性,很多开发语言都支持, Java 在版本8 开始引入。 Lamba 表达式是什么? 匿名内部类 接口只能有一个需要被实现的方法 Lamba 表达式作用 代码变得简洁 Lamba 表达式可以直接作为参数传递给函数 Lamba 语法 ()->{} ()括号 用来描述参数列表 {}大括号 用来描述方法体 -> 是Lambda 运算符,读作goes to (parameters) -> expression (parameters)

oscar999的专栏 674

Java学习日记14——Lambda表达式以及一些高级语法

Java学习日记14——Lambda表达式(λ表达式) Lambda表达式的基本写法 Java1.8以后才有的。 (参数) -> (结果) //例如: (String s) -> s.length(); x -> x*x; () ->{System.out.println("aaa");} 在Java中的Lambda表达式,大体相当于其他语言的匿名函数或者指针函数。然而在Java中,则可以认为是匿名类的一个实例。至于匿名类,在前面已经简单陈述过了。 ...

Andy24.的博客 1079

【学习笔记】Java函数式编程01-Lambda表达式

看懂代码提高处理大数据量集合的效率代码可读性提升消灭嵌套地狱(反复的嵌套for …if …for …if …导致可读性下降Lambda表达式可以理解为JDK8新增了一个语法糖。对某一些匿名内部类的写法进行简化。是函数式编程的重要体现让程序员不用关注对象,而关注对数据的操作语法糖(Syntactic sugar),也译为糖衣语法[外链图片转存中…(img-ultqjqy9-1703122023748)]指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。

Xcong_Zhu的博客 1218

深入学习Java中的Lambda表达式

自Java 8引入以来,Lambda表达式彻底改变了Java的编程风格,让代码变得更加简洁、易读,尤其是在函数式编程的场景中。接下来,我们将深入探讨Lambda表达式的语法、原理以及实际应用,帮助你更好地理解并运用这一强大的工具。

weixin_49426115的博客 899

JAVA入门学习之Lambda表达式

顾名思义,函数式接口首先必须要是一个接口,同时该接口中只能包含一个方法。这一约束也可以防止简化代码时出现方法体对应不正确而造成错误。

qq_44705240的博客 203

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

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

weixin_39612677的博客 268

Java学习——lambda表达式

lambda表达式

qq_45944185的博客 1万+

Java----Lambda表达式学习

Java----Lambda表达式学习 1.理解概念 -静态内部类 -局部内部类 -匿名内部类 -函数式接口(有且仅有一个抽象方法,但是可以有多个非抽象方法的接口) -Lambda表达式 这便是大致简化过程: package edu.ncu.dong.lambda; //测试lambda,及其简化过程 public class TestLambda { //2.静态内部类 static class IPlay2 implements Play{ @Override

qq_46492246的博客 108

《Java函数式编程实战》学习总结 第1章 简介&第2章 Lambda表达式

java8新增函数式编程,根据学习的历程,会总结一些干货分享

七月的夏天博客 566

【Java】函数式编程学习笔记——Lambda表达式

函数式编程——Lambda表达式

See_Star的博客 2256
上一篇: Java学习-Eclipse的使用
下一篇: Java学习-JDBC
Jagger_Lin
博客等级 码龄8年 17粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值