JAVA中的Lamda表达式

JAVA中的Lamda表达式

  • Lambda 表达式的语法
  • 使用场景
  • 示例代码
      • 1.代替匿名内部类
      • 2. 带参数的 Lambda 表达式
      • 3. 与集合框架结合使用
      • 4. 使用 Stream 操作
  • 总结

Java 的 Lambda 表达式是 Java 8 引入的一个新特性,用于简化代码,特别是在处理函数式编程时。Lambda 表达式提供了一种更简洁和灵活的方式来表示匿名函数(或称闭包)。

Lambda 表达式的语法

  (parameters) -> expression
  或
  (parameters) -> { statements; }
  • parameters:参数列表,可以为空,也可以有一个或多个参数。
  • ->:箭头操作符,分隔参数列表和方法体。
  • expressionstatements:表示方法体,可以是单个表达式或多条语句(用大括号括起来)。

使用场景

Lambda 表达式主要用于简化接口实现,特别是函数式接口(即只有一个抽象方法的接口)。例如:

  • 替代匿名内部类
  • 配合集合框架的操作,如 stream、map、filter 等

示例代码

1.代替匿名内部类

传统写法:

Runnable r1 = new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello, world!");
    }
};
r1.run();

Lambda 表达式写法:

Runnable r2 = () -> System.out.println("Hello, world!");
r2.run();

2. 带参数的 Lambda 表达式

传统写法:

Comparator<Integer> comparator = new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o1 - o2;
    }
};

Lambda 表达式写法:

Comparator<Integer> comparator = (o1, o2) -> o1 - o2;

3. 与集合框架结合使用

传统写法:

List<String> list = Arrays.asList("a", "b", "c");
for (String s : list) {
    System.out.println(s);
}

Lambda 表达式写法:

List<String> list = Arrays.asList("a", "b", "c");
list.forEach(s -> System.out.println(s));

4. 使用 Stream 操作

使用 Lambda 表达式和 Stream API 可以方便地进行集合的过滤、映射和聚合操作:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = numbers.stream()
                                    .filter(n -> n % 2 == 0)
                                    .collect(Collectors.toList());
System.out.println(evenNumbers); // 输出:[2, 4]


总结

Lambda 表达式简化了匿名类的语法,尤其在配合函数式接口和 Java 8 的 Stream API 时显得特别强大。它的主要优点包括:

  1. 代码简洁:减少冗余代码。
  2. 可读性提高:表达逻辑更加清晰。
  3. 便于函数式编程:与 Java 8 的新特性(如 Stream)结合使用效果最佳。

注意:

  • Lambda 表达式只能用于函数式接口(只有一个抽象方法的接口)。
  • 使用时需要注意上下文和类型推导的正确性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【c++丨STL】stack和queue的使用及模拟实现

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C、STL 目录 前言 一、什么是容器适配器 二、stack的使用及模拟实现 1. stack的使用 empty size top push和pop swap 2. stack的模拟实现 三、queue的…

ApiChain 从迭代到项目 接口调试到文档生成单元测试一体化工具

项目地址&#xff1a;ApiChain 项目主页 ApiChain 简介 ApiChain 是一款类似 PostMan 的接口网络请求与文档生成软件&#xff0c;与 PostMan 不同的是&#xff0c;它基于 项目和迭代两个视角管理我们的接口文档&#xff0c;前端和测试更关注版本迭代中发生变更的接口编写代码…

力扣面试题 - 24 插入

题目&#xff1a; 给定两个整型数字 N 与 M&#xff0c;以及表示比特位置的 i 与 j&#xff08;i < j&#xff0c;且从 0 位开始计算&#xff09;。 编写一种方法&#xff0c;使 M 对应的二进制数字插入 N 对应的二进制数字的第 i ~ j 位区域&#xff0c;不足之处用 0 补齐…

网络安全,文明上网(4)掌握网络安全技术

前言 在数字化时代&#xff0c;个人信息和企业数据的安全变得尤为重要。为了有效保护这些宝贵资产&#xff0c;掌握一系列网络安全技术是关键。 核心技术及实施方式 1. 网络监控与过滤系统&#xff1a; 这些系统构成了网络防御体系的基石&#xff0c;它们负责监控网络通信&…

[开源] SafeLine 好用的Web 应用防火墙(WAF)

SafeLine&#xff0c;中文名 “雷池”&#xff0c;是一款简单好用, 效果突出的 Web 应用防火墙(WAF)&#xff0c;可以保护 Web 服务不受黑客攻击 一、简介 雷池通过过滤和监控 Web 应用与互联网之间的 HTTP 流量来保护 Web 服务。可以保护 Web 服务免受 SQL 注入、XSS、 代码注…

ELK8.15.4搭建开启安全认证

安装 Elastic &#xff1a;Elasticsearch&#xff0c;Kibana&#xff0c;Logstash 另外安装一个收集器filebeat 通过二进制安装包进行安装 创建一个专门放elk目录 mkdir /elk/ mkdir /elk/soft下载 es 、kibana、Logstash、filebeat二进制包 cd /elk/softwget https://art…

excel版数独游戏(已完成)

前段时间一个朋友帮那小孩解数独游戏&#xff0c;让我帮解&#xff0c;我看他用电子表格做&#xff0c;只能显示&#xff0c;不能显示重复&#xff0c;也没有协助解题功能&#xff0c;于是我说帮你做个电子表格版的“解题助手”吧&#xff0c;不能直接解题&#xff0c;但该有的…

Linux上安装单机版Kafka

1、上传Kafka安装包至Linux并进行解压 kafka_2.12-1.1.1.tgz 链接&#xff1a;https://pan.baidu.com/s/1i41RKHlCbp0q2xQ1PEgT5g 提取码&#xff1a;vofa 将安装包解压 tar -zxvf kafka_2.12-1.1.1.tgz 2、修改kafka配置 vi config/server.properties 只修改绑定 IP &#…

Kafka 消费者全面解析:原理、消费者 API 与Offset 位移

Kafka&#xff1a;分布式消息系统的核心原理与安装部署-CSDN博客 自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客 Kafka 生产者全面解析&#xff1a;从基础原理到高级实践-CSDN博客 Kafka 生产者优化与数据处理经验-CSDN博客 Kafka 工作流程解析&#xff1a…

AUTOSAR - 接口

Application Port Interface&#xff0c;Service Port Interface&#xff0c;除了IS-SERVICE字段外&#xff0c;其余都相同。 ClientServer 支持IsService <CLIENT-SERVER-INTERFACE UUID"523b6eb5-6814-4b10-893e-de3aa9b68b90"><SHORT-NAME>app_cs_1&…

Android Gradle自定义任务在打包任务执行完成后执行cmd命令

背景 在每次打包之后需要做某事&#xff0c;例如每次打包后我都会安装某个目录下的一个apk。这个apk是通过一堆shell命令过滤得到一个apk的地址&#xff0c;然后把执行的几个shell命令何必成一个alias指令&#xff0c;在打包后只需要执行alias指令实现功能。当然也可以直接写在…

2023AE软件、Adobe After Effects安装步骤分享教程

2023AE软件是一款由Adobe公司开发的视频编辑软件&#xff0c;也被称为Adobe After Effects。它在广告、电影、电视和网络视频等领域广泛应用&#xff0c;用于制作动态图形、特效、合成和其他视觉效果。该软件支持多种视频和音频文件格式&#xff0c;具有丰富的插件和预设&#…

Prometheus结合K8s(二)使用

上一篇介绍了如何搭建 Prometheus结合K8s&#xff08;一&#xff09;搭建-CSDN博客&#xff0c;这章介绍使用 页面访问 kubectl get svc -n prom 看promeheus和granfana的端口访问页面 Prometheus 点击status—target&#xff0c;可以看到metrics的数据来源&#xff0c;即各…

单片机学习笔记 1. 点亮一个LED灯

把基础的东西都过一下&#xff0c;用来学习记录一下。 目录 1、Keil工程 2、Keil实现代码 3、烧录程序 0、实现的功能 点亮一个LED灯 1、Keil工程 打开Keil&#xff0c;Project----New uVision Project&#xff0c;工程文件命名----OK 选择单片机类型AT89C52&#xff0c;和…

Ubuntu安装sublime Tex

Ubuntu安装sublime Text步骤_ubuntu sublime-CSDN博客 Sublime Text 3 - Sublime Text sudo dpkg -i sublime-text_build_3211_amd64.deb

基于FPGA(现场可编程门阵列)的SD NAND图片显示系统是一个复杂的项目,它涉及硬件设计、FPGA编程、SD卡接口、NAND闪存控制以及图像显示等多个方面

文章目录 0、前言 1、目标 2、图片的预处理 3、SD NAND的预处理 4、FPGA实现 4.1、详细设计 4.2、仿真 4.3、实验结果 前言 在上一篇文章《基于FPGA的SD卡的数据读写实现&#xff08;SD NAND FLASH&#xff09;》中&#xff0c;我们了解到了SD NAND Flash的相关知识&am…

Ubuntu24.04LTS设置root用户可远程登录

Ubuntu24.04LTS设置root用户可远程登录 文章目录 Ubuntu24.04LTS设置root用户可远程登录1. 设置root密码2. 设置root用户可远程登录1. 查看ssh服务是否安装2. 安装ssh服务3. 再次查看ssh服务是否安装4. 配置ssh文件5. 重启ssh服务6. root远程登录 1. 设置root密码 Ubuntu安装后…

VM虚拟机装MAC后无法联网,如何解决?

✨在vm虚拟机上&#xff0c;给虚拟机MacOS设置网络适配器。选择NAT模式用于共享主机的IP地址 ✨在MacOS设置中设置网络 以太网 使用DHCP ✨回到本地电脑上&#xff0c;打开 服务&#xff0c;找到VMware DHCP和VMware NAT&#xff0c;把这两个服务打开&#xff0c;专一般问题就…

python中的base64使用小笑话

在使用base64的时候将本地的图片转换为base64 代码如下&#xff0c;代码绝对正确 import base64 def image_to_data_uri(image_path):with open(image_path, rb) as image_file:image_data base64.b64encode(image_file.read()).decode(utf-8)file_extension image_path.sp…

bert的模型训练和使用情绪识别

bert我的理解从它的名字可以看出来&#xff0c;它是一种双向的编码器解码器结构&#xff0c;也就是说它非常的高效&#xff0c;非常的高级&#xff0c;在它非常小的麻雀腹内居然五脏俱全。所以按道理来说&#xff0c;它应该是比gpt模型更加全面。所以我们有学习它的必要。 安装…