Lambda表达式(Java)
1.Lambda表达式
Lambda是一个匿名函数,我们可以将Lambda表达式理解为一段可以传递的代码(将代码像数据一样传递)。
“->”(Lambda操作符)左边:Lambda表达式的所有参数。右边:Lambda体,Lambda需要执行的功能。
public class MyRunnable implements Runnable{@Overridepublic void run() {System.out.println("这是一个实现Runnable接口的子线程!");}
}
public class Test {public static void main(String[] args) {MyRunnable myRunnable = new MyRunnable();//等价于Runnable runnable = new Runnable(){@Overridepublic void run() {System.out.println("这是一个实现Runnable接口的子线程!");}};//等价于Runnable runnable1 = ()-> System.out.println("这是一个实现Runnable接口的子线程!");Thread thread = new Thread(myRunnable);thread.start();//等价于new Thread(new Runnable() {@Overridepublic void run() {System.out.println("这是一个实现Runnable接口的子线程!");}}).start();//等价于new Thread(() -> System.out.println("这是一个实现Runnable接口的子线程!")).start();}
1.无参、无返回值
public interface Www {public abstract void print1();//无参、无返回值
}public class WwwTest {public static void main(String[] args) {Www www1 = new Www() {@Overridepublic void print1() {System.out.println("无参、无返回值");}};Www www2 = ()-> {System.out.println("无参、无返回值")};//等价于 当Lambda体只有一条语句的时候,return和{}可以省略掉Www www3 = ()-> System.out.println("无参、无返回值");//以上三种方法相当于创建一个类实现了Www接口。//当运行方法时,要使用对象名.print();}
}
2.无参、有返回值
public interface Www {public abstract String print2();//无参、有返回值//public abstract String print3(String name);//有参、有返回值//public abstract String print4(String name,int i);//有多个参、有返回值
}package lambda;public class WwwTest {public static void main(String[] args) {Www www1 = new Www() {@Overridepublic String print2() {return "无参、有返回值";}Www www2 = ()-> "无参、有返回值";//等价于Www www3 = ()->{ return "无参、有返回值";};//以上三种方法相当于创建一个类实现了Www接口。//当运行方法时,要使用对象名.print();}
}
3.有参、有返回值
public interface Www {public abstract String print3(String name);//有参、有返回值
}public class WwwTest {public static void main(String[] args) {Www www1 = new Www() {@Overridepublic String print3(String name) {System.out.println(name);return "有参、有返回值";}Www www2 = (name)->{System.out.println(name);return "有参、有返回值";};//等价于 只有一个参数时,可以省略()Www www3 = name->{System.out.println(name);return "有参、有返回值";};}
}
4.有多个参、有返回值
public interface Www {public abstract String print4(String name,int i);//有多个参、有返回值
}public class WwwTest {public static void main(String[] args) {Www www1 = new Www() {@Overridepublic String print4(String name, int i) {System.out.println(name+i);return "有多个参、有返回值";}};Www www2 = (name, i) -> {System.out.println(name+i);return "有多个参、有返回值";};}
}
5.类型推断:数据类型可以省略,因为编译器可以推断得出,称为“类型推断”。
public interface Www {public abstract String print4(String name,int i);//有多个参、有返回值
}public class WwwTest {public static void main(String[] args) {Www www1 = new Www() {@Overridepublic String print4(String name, int i) {System.out.println(name+i);return "有多个参、有返回值";}};Www www2 = (String name,int i) -> {System.out.println(name+i);return "有多个参、有返回值";};//等价于Www www3 = (name, i) -> {System.out.println(name+i);return "有多个参、有返回值";};}
}
2.forEach+Lambda
1.使用forEach和Lambda循环list集合
public class ArrayList {public static void main(String[] args) {List<String> list = new java.util.ArrayList<>();list.add("a");list.add("b");list.add("c");list.add("d");list.forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}});System.out.println("--------------------");list.forEach(s -> System.out.println(s));}
}
2.使用forEach和Lambda循环map集合
public class Student {private String name;public Student(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}public class HashMap1 {public static void main(String[] args) {Map<String,Student> map = new HashMap<>();map.put("a",new Student("张三"));map.put("b",new Student("李四"));map.put("c",new Student("王五"));map.forEach((key,value)-> System.out.println(key+"======"+ value.getName()));//使用for增强循环遍历map集合System.out.println("=====================");Set keys = map.keySet();//返回键的集合for (Object key : keys) {System.out.println(key+"====="+map.get(key).getName());//get(key)根据键返回值}}
}
3.函数接口
只包含一个抽象方法的接口,称为函数式接口。并且可以使用lambda表达式来创建该接口的对象,可以在任意函数式接口上使用 @FunctionalInterface 注解,来检测它是否是符合函数式接口。同时javac也会包含一条声明,说明这个接口是否符合函数式接口。
Java中的函数式编程体现就是Lambda表达式,所以函数式接口即可以适用于Lambda使用的接口。
@FunctionalInterface
public interface Www {public abstract void print();
}public class WwwTest {public static void main(String[] args) {Www www1 = new Www() {@Overridepublic void print() {System.out.println("aaaa");}};www1.print();Www www2 = ()-> System.out.println("aaaa");www2.print();}
}
当接口中写入两个抽象方法时,会报错。
·
相关文章:

Lambda表达式(Java)
1.Lambda表达式 Lambda是一个匿名函数,我们可以将Lambda表达式理解为一段可以传递的代码(将代码像数据一样传递)。 “->”(Lambda操作符)左边:Lambda表达式的所有参数。右边:Lambda体&#x…...
不同的子序列
题目 给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。 字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,“ACE” 是 “…...

CI24R1——精简版Si24R1,高性价比替代XN297开发资料
CI24R1为了减低用户的开发时间,将2.4G芯片开发出2.4G小模块,用户直接贴片调试,大大降低了开发时间跟生产工序。广泛应用在灯控、鼠标、玩具等智能物联网产品。 CI24R1小模块(内置天线) 是 2.4GHz 模块。该模块核心处理…...

MySQL递归查询笔记
目录 一、创建表结构和插入数据 二、查询所有子节点 三、查询所有父节点 四、查询指定节点的根节点 五、查询所有兄弟节点(同级节点) 六、获取祖先节点及其所有子节点 七、查询每个节点之间的层级关系 八、查询指定节点之间的层级关系 一、创建表…...
java中的位运算
位运算是对整数的二进制位进行操作的一种运算。在java中long, int, short, char和byte类型都可以使用位运算。 位运算的过程如下:首先将十进制整数转换成二进制表示形式,然后将位运算符应用于每个二进制数位,并计算结果。最后,将…...

llamafactory0.9.0微调qwen2vl
LLaMA-Factory/data/README_zh.md at main hiyouga/LLaMA-Factory GitHubEfficiently Fine-Tune 100+ LLMs in WebUI (ACL 2024) - LLaMA-Factory/data/README_zh.md at main hiyouga/LLaMA-Factoryhttps://github.com/hiyouga/LLaMA-Factory/blob/main...

Electron 隐藏顶部菜单
隐藏前: 隐藏后: 具体设置代码: 在 main.js 中加入这行即可: // 导入模块 const { app, BrowserWindow ,Menu } require(electron) const path require(path)// 创建主窗口 const createWindow () > {const mainWindow ne…...

软件测试学习笔记丨curl命令发送请求
本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/32332 一、简介 cURL是一个通过URL传输数据的,功能强大的命令行工具。cURL可以与Chrome Devtool工具配合使用,把浏览器发送的真实请求还原出来,附带认证信…...

STM32+PWM+DMA驱动WS2812 —— 2024年9月24日
一、项目简介 采用STM32f103C8t6单片机,使用HAL库编写。项目中针对初学者驱动WS2812时会遇到的一些问题,给出了解决方案。 二、ws2812驱动原理 WS2812采用单线归零码的通讯方式,即利用高低电平的持续时间来确定0和1。这种通信方式优点是只需…...

MMD模型及动作一键完美导入UE5-IVP5U插件方案(二)
1、下载并启用IVP5U插件 1、下载IVP5U插件, IVP5U,点击Latest下载对应引擎版本,将插件放到Plugins目录,同时将.uplugin文件的EnableByDefault改为false 2、然后通过Edit->Plugins启用插件 2、导入pmx模型 1、直接在Content的某个目录拖入pmx模型,选择默认参数 2、…...

C++函数指针
函数指针是将一个函数赋值给一个变量的方法 我们使用函数的方法,可能会给函数传入参数,或者传入参数,函数可能有返回值,也可能没有返回值(void) 下面这个例子,我们调用了HelloWorld函数 auto关…...

汽车信息安全 -- 再谈车规MCU的安全启动
目录 1. 安全启动流程回顾 1.1 TC3xx的安全启动 1.2 RH850的安全启动 1.3 NXP S32K3的安全启动 1.4 小结 2.信任链的问题 3.国产HSM IP的拓展 今天接着 汽车信息安全 -- 存到HSM中的密钥还需包裹吗?-CSDN博客这篇文章深究另一个重要功能-- 安全启动。 该文章…...

[Linux]从零开始的Linux的远程方法介绍与配置教程
一、为什么需要远程Linux 相信大家在学习Linux时,要么是使用Linux的虚拟机或者在物理机上直接安装Linux。这样确实非常方便,我们也能直接看到Linux的桌面或者终端。既然我们都能直接看到终端或者Linux的桌面了,那我们为什么还要远程Linux呢&a…...

手机改IP地址怎么弄?全面解析与操作指南
在当今数字化时代,IP地址作为设备在网络中的唯一标识,其重要性不言而喻。有时候,出于隐私保护、网络访问需求或其他特定原因,我们可能需要更改手机的IP地址。然而,对于大多数普通用户来说,如何操作可能还是…...
【React】useState 和 useRef:项目开发中该如何选择
如果你正踏入用 React 进行网页开发的世界,那你可能已经遇到了像 useState 和 useRef 这样的术语。这两个 Hook 在构建交互性和动态组件时起着至关重要的作用。 下面,我们将探讨它们是什么,它们的功能,它们的区别,并通…...
python装饰器用法
为什么用装饰器? 第一个原因是,使用装饰器可以提升代码复用,避免重复冗余代码。如果我有多个函数需要测量执行时间,我可以直接将装饰器应用在这些函数上,而不是给多个函数加上一样的代码。这样的代码既元余也不方便后…...

AI 写作太死板?原因竟然是这个!
有些同学跟我埋怨说AI生成的文章太死板,一堆的“首先、其次、然后、再次、接着、总而言之……”,说话太官方,内容还很水。 想要让它模仿谁的语气,或者谁的文章,一点儿都不像。 名人都不模仿不了,更别说模…...
ansible实用模块
简介 ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。…...
【JavaScript】JIT
JIT实际上指,JS的编译过程、运行时。 Just in Time 在传统的编译语言里,比如JAVA、Go等,是提前编译的,它们的执行是先在本地编译出一个"东西",然后在放到服务器上运行。 提前编译的三大过程: …...

Matlab实现麻雀优化算法优化回声状态网络模型 (SSA-ESN)(附源码)
目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1内容介绍 麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种新兴的群体智能优化算法,灵感来源于麻雀的觅食行为及其在面临危险时的预警机制。SSA通过模拟麻雀的这些自然行为来寻找问题…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...