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通过模拟麻雀的这些自然行为来寻找问题…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案
一、延迟敏感行业面临的DDoS攻击新挑战 2025年,金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征: AI驱动的自适应攻击:攻击流量模拟真实用户行为,差异率低至0.5%,传统规则引…...
13.10 LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析
LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析 LanguageMentor 对话式训练系统架构与实现 关键词:多轮对话系统设计、场景化提示工程、情感识别优化、LangGraph 状态管理、Ollama 私有化部署 1. 对话训练系统技术架构 采用四层架构实现高扩展性的对话训练…...
职坐标物联网全栈开发全流程解析
物联网全栈开发涵盖从物理设备到上层应用的完整技术链路,其核心流程可归纳为四大模块:感知层数据采集、网络层协议交互、平台层资源管理及应用层功能实现。每个模块的技术选型与实现方式直接影响系统性能与扩展性,例如传感器选型需平衡精度与…...
Linux入门课的思维导图
耗时两周,终于把慕课网上的Linux的基础入门课实操、总结完了! 第一次以Blog的形式做学习记录,过程很有意思,但也很耗时。 课程时长5h,涉及到很多专有名词,要去逐个查找,以前接触过的概念因为时…...
iOS 项目怎么构建稳定性保障机制?一次系统性防错经验分享(含 KeyMob 工具应用)
崩溃、内存飙升、后台任务未释放、页面卡顿、日志丢失——稳定性问题,不一定会立刻崩,但一旦积累,就是“上线后救不回来的代价”。 稳定性保障不是某个工具的功能,而是一套贯穿开发、测试、上线全流程的“观测分析防范”机制。 …...
dvwa11——XSS(Reflected)
LOW 分析源码:无过滤 和上一关一样,这一关在输入框内输入,成功回显 <script>alert(relee);</script> MEDIUM 分析源码,是把<script>替换成了空格,但没有禁用大写 改大写即可,注意函数…...
