Java8的Lambda表达式

Java中的Lambda表达式是Java 8引入的一种新特性,主要用于简化代码,特别是在处理函数式编程和集合操作时。Lambda表达式允许你将功能作为方法参数传递,使代码更加简洁和易读。

1.基本语法

Lambda 的格式由3个部分组成

其标准格式为:
(参数类型 参数名称 …) -> { 代码语句 }

  1. 多个参数 小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔。
  2. 一个箭头 -> 是新引入的语法格式,代表指向动作。
  3. 一段代码 大括号内的语法与传统方法体要求基本一致。实现的为代码逻辑部分,可以是一行代码也可以是一个代码片段

案例1:使用Lambda表达式实现Runnable接口

public class LambdaDemo1 {public static void main(String[] args) {// 使用匿名类 传统写法  Runnable runnable1 = new Runnable() {@Overridepublic void run() {System.out.println("我是1!");}};// 使用Lambda表达式Runnable runnable2 = () -> System.out.println("我是2!");// 执行Runnablerunnable1.run();runnable2.run();}
}

案例2:使用Lambda表达式遍历集合

public class LambdaDemo2 {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("Java");list.add("Python");list.add("C++");// 使用Lambda表达式遍历集合list.forEach(item -> System.out.println(item));// 或者更简洁的方式list.forEach(System.out::println);}
}

案例3:使用Lambda表达式实现Comparator接口

public class LambdaDemo3 {public static void main(String[] args) {String[] names = {"AAA", "BBB", "CCC", "DDD"};// 使用匿名类Arrays.sort(names, new Comparator<String>() {@Overridepublic int compare(String a, String b) {return b.compareTo(a);}});// 使用Lambda表达式(省略类型参数)Arrays.sort(names, (a, b) -> b.compareTo(a));// 进一步简化,使用 Comparator.reverseOrder()Arrays.sort(names, Comparator.reverseOrder());// 输出排序结果for (String name : names) {System.out.println(name);}}
}

案例4:使用Lambda表达式进行集合过滤和映射

public class LambdaDemo4 {public static void main(String[] args) {List<String> stringList = Arrays.asList("AAA", "B", "CCC", "D");// 过滤长度大于2的字符串List<String> filtered = stringList.stream().filter(s -> s.length() > 2).collect(Collectors.toList());// 映射为大写List<String> upperCased = stringList.stream().map(String::toUpperCase).collect(Collectors.toList());// 输出结果filtered.forEach(System.out::println);upperCased.forEach(System.out::println);}
}

案例5:使用Lambda表达式实现自定义函数式接口

interface MathOperation {int operation(int a, int b);
}public class LambdaDemo5 {public static void main(String[] args) {// 定义加法操作MathOperation addition = (a, b) -> a + b;// 定义减法操作MathOperation subtraction = (a, b) -> a - b;// 使用自定义的函数式接口System.out.println("10 + 5 = " + operate(10, 5, addition));System.out.println("10 - 5 = " + operate(10, 5, subtraction));}private static int operate(int a, int b, MathOperation mathOperation) {return mathOperation.operation(a, b);}
}
案例1中的Runnable

Runnable是Java中一个非常重要的接口,用于定义一个任务,该任务可以在线程中执行。Runnable接口只有一个抽象方法:

public interface Runnable {void run();
}

实现Runnable接口的类需要提供run方法的具体实现,这个方法会包含任务的具体逻辑。Runnable接口常与Thread类一起使用,以便在一个新的线程中执行任务。

使用Runnable的基本步骤
  1. 实现Runnable接口:创建一个类并实现Runnable接口,提供run方法的实现。
  2. 创建Thread对象:将实现了Runnable接口的对象传递给Thread对象的构造方法。
  3. 启动线程:调用Thread对象的start方法,启动新的线程并执行run方法中的代码。
示例:使用Runnable接口创建并启动一个线程

下面是一个简单的例子,展示如何使用Runnable接口创建并启动一个线程:

class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println("Hello from a thread!");}
}public class RunnableExample {public static void main(String[] args) {// 创建一个Runnable实例Runnable myRunnable = new MyRunnable();// 将Runnable实例传递给Thread构造器Thread thread = new Thread(myRunnable);// 启动线程thread.start();// 主线程的输出System.out.println("Hello from the main thread!");}
}

在这个例子中,MyRunnable类实现了Runnable接口并提供了run方法的实现。在main方法中,创建了一个MyRunnable实例,并将其传递给Thread构造方法,然后调用start方法启动新线程,执行run方法中的代码。

使用Lambda表达式实现Runnable

Java 8引入了Lambda表达式,使得实现Runnable接口变得更加简洁。可以直接用Lambda表达式代替匿名类来创建Runnable对象:

public class LambdaRunnableExample {public static void main(String[] args) {// 使用Lambda表达式实现Runnable接口Runnable myRunnable = () -> System.out.println("Hello from a thread!");// 将Runnable实例传递给Thread构造器Thread thread = new Thread(myRunnable);// 启动线程thread.start();// 主线程的输出System.out.println("Hello from the main thread!");}
}

在这个例子中,Lambda表达式()-> System.out.println(“Hello from a thread!”)实现了Runnable接口的run方法,使代码更加简洁和易读。

Runnable接口的常见用途
  1. 并行执行任务:通过将不同的任务放入不同的线程中执行,实现并行处理。
  2. 定时任务:配合定时器,可以定期执行某些任务。
  3. 后台任务:在后台执行不需要立即返回结果的任务,例如文件下载、数据备份等。

Runnable接口是Java并发编程中的一个基础接口,定义了一个可以在线程中执行的任务。通过实现Runnable接口,可以将任务逻辑与线程管理分离,使得代码更加清晰和可维护。

转载自开思通智网:https://www.opensnn.com/os/article/10000881

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

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

相关文章

Java面试八股之Mybatis和JPA的区别

Mybatis和JPA的区别 Mybatis 和 JPA&#xff08;Java Persistence API&#xff09;是两种在 Java 应用程序中用于数据持久化的框架&#xff0c;它们各有特点和适用场景。下面是它们之间的一些主要区别&#xff1a; 映射方式&#xff1a; Mybatis 是半自动的 ORM 框架&#xf…

MACER

MACER: A Modular Framework for Accelerated Compilation Error Repair 基本信息 博客贡献人 页禾七 作者 Darshak Chhatbar&#xff0c; Umair Z. Ahmed&#xff0c;Purushottam Kar 摘要 自动编译错误修复&#xff0c;即对无法编译的错误程序提出修复建议的问题&…

Android集成mapbox教程

目录 简介准备工作创建Token系统开发简介 Mapbox是来自美国的一家为开发者提供地图服务和开发工具的开放平台。Mapbox以开源的形式构建了矢量瓦片技术生态,开发了矢量切片工具、瓦片服务传输框架。Mapbox的底图平台非常受欢迎,特别是开发者和学生群体,可以使用免费的开源软…

吊打Unity的角色动画重定向专业版工具FPS手臂武器动画动物动画角色动作微调烘焙20240620

今天发现一款关注已久的Unity插件上架商店了&#xff0c;可以将动画从一个通用/人形角色重新定位到另一个通用角色。 吊打Unity的角色动画重定向专业版工具FPS手臂武器动画动物动画角色动作微调烘焙202406201103 Unity 中任何通用角色的终极解决方案。它没有 Humanoid 系统的限…

C++的智能指针 RAII

目录 产生原因 RAII思想 C11的智能指针 智能指针的拷贝与赋值 shared_ptr的拷贝构造 shared_ptr的赋值重置 shared_ptr的其它成员函数 weak_ptr 定制删除器 简单实现 产生原因 产生原因&#xff1a;抛异常等原因导致的内存泄漏 int div() {int a, b;cin >> a…

生成对抗网络——CGAN(代码+理解)

目录 一、CGAN模型介绍 二、CGAN训练流程 1. 初始化 2. 数据准备 3. 输出模型计算结果 4. 计算损失 5. 反向传播和优化 6. 迭代训练 三、CGAN实现 1. 模型结构 &#xff08;1&#xff09;生成器&#xff08;Generator&#xff09; &#xff08;2&#xff09;判别器…

ShuffleNet系列论文阅读笔记(ShuffleNetV1和ShuffleNetV2)

目录 ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices摘要Approach—方法Channel Shuffle for Group Convolutions—用于分组卷积的通道重排ShuffleNet Unit—ShuffleNet单元Network Architecture—网络体系结构 总结 ShuffleNet V2: Pra…

Vmware与Windows之间复制、粘贴内容、拖拽文件

Vmware17.0Ubuntu20 Vmware正确安装完linux虚拟机之后&#xff0c;这里以Ubuntu为例&#xff08;其他linux或windows系统也是类似的&#xff09;&#xff0c;如果你使用的默认配置&#xff0c;正常情况下就可以复制、粘贴和拖拽内容的&#xff0c;双方向都是支持的。如果不能复…

nvdiadocker相关配置S3Gaussian

https://download.csdn.net/download/sinat_21699465/89458214 dockerfile文件参考&#xff1a; https://download.csdn.net/download/sinat_21699465/89458214 prework&#xff1a; 显卡驱动决定了cuda版本支持的上限。例如nvdia535驱动最高支持cuda12.2所以显卡驱动版本选…

15.树形虚拟列表实现(支持10000+以上的数据)el-tree(1万+数据页面卡死)

1.问题使用el-tree渲染的树形结构&#xff0c;当数据超过一万条以上的时候页面卡死 2.解决方法&#xff1a; 使用vue-easy-tree来实现树形虚拟列表&#xff0c;注意&#xff1a;vue-easy-tree需要设置高度 3.代码如下 <template><div class"ve-tree" st…

2024广东省职业技能大赛云计算赛项实战——OpenStack搭建

OpenStack搭建 前言 搭建采用双节点安装&#xff0c;即controller控制节点和compute计算节点。 CentOS7 系统选择 2009 版本&#xff1a;CentOS-7-x86_64-DVD-2009.iso 可从阿里镜像站下载&#xff1a;https://mirrors.aliyun.com/centos/7/isos/x86_64/ OpenStack使用竞赛培…

JaveEE进阶----Spring Web MVC入门

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、什么是 Spring Web MVC&#xff1f;&#xff1f;1.1MVC 定义1.2 什么是Spring MVC ?1.3过浏览器和用户程序交互 二、 RequestMapping 注解三、Postman 前言…

容器基本概念_从虚拟化技术_到容器化技术_开通青云服务器_并远程连接_容器安装---分布式云原生部署架构搭建007

这一部分,属于以前都会用到的,会快速过一遍,对于关键技术问题会加以说明 https://www.yuque.com/leifengyang/oncloud文档地址在这里,可以看,有些命令可以复制使用 可以看到容器的出现就是 目的就是,让你做的所有的软件,都可以一键部署启动 打包就是docker build 然后: 对于…

陈晓婚前婚后大变样

陈晓婚前婚后大变样&#xff1f;陈妍希揭秘甜蜜与现实的碰撞在娱乐圈的星光璀璨中&#xff0c;有一对夫妻总是津津乐道&#xff0c;那就是陈晓和陈妍希。他们的爱情故事&#xff0c;从荧幕到现实&#xff0c;一直备受关注。然而&#xff0c;近日陈妍希在节目中透露&#xff0c;…

差分总结(一维+二维)

差分&#xff0c;可以视作前缀和的逆运算。 前缀和用于去求一个区间段的和 差分用于改变一个区间的值&#xff08;比如说某个区间都加上或者减去一个数&#xff09; P2367 语文成绩 #include<bits/stdc.h> using namespace std; #define int long long int n,p; int a…

RabbitMQ 学习笔记

RabbitMQ学习笔记 一些概念 Broker &#xff1a;RabbitMQ服务。 virtual host&#xff1a; 其实就是分组。 Connection&#xff1a;连接&#xff0c;生产者消费者与Broker之间的TCP连接。 Channel&#xff1a;网络信道&#xff0c;轻量级的Connection&#xff0c;使用Chann…

2024广东省职业技能大赛云计算赛项实战——Minio服务搭建

Minio服务搭建 前言 这道题是比赛时考到的&#xff0c;没找到具体题目&#xff0c;但在公布的样题中找到了&#xff0c;虽然很短~ 使用提供的 OpenStack 云平台&#xff0c;申请一台云主机&#xff0c;使用提供的软件包安装部署 MINIO 服务并使用 systemctl 管理 Minio是一个…

HTML静态网页成品作业(HTML+CSS)——手机电子商城网页(4个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有4个页面。 二、作品演示 三、代…

python API自动化(Pytest+Excel+Allure完整框架集成+yaml入门+大量响应报文处理及加解密、签名处理)

1.pytest数据参数化 假设你需要测试一个登录功能&#xff0c;输入用户名和密码后验证登录结果。可以使用参数化实现多组输入数据的测试: 测试正确的用户名和密码登录成功 测试正确的用户名和错误的密码登录失败 测试错误的用户名和正确的密码登录失败 测试错误的用户名和密码登…

定时器-前端使用定时器3s轮询状态接口,2min为接口超时

背景 众所周知&#xff0c;后端是处理不了复杂的任务的&#xff0c;所以经过人家的技术讨论之后&#xff0c;把业务放在前端来实现。记录一下这次的离大谱需求吧。 如图所示&#xff0c;这个页面有5个列表&#xff0c;默认加载计划列表。但是由于后端的种种原因&#xff0c;这…