JAVA中的Lamda表达式

news2024/11/22 15:00:03

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

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

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

相关文章

电子应用设计方案-16:智能全屋灯光系统方案设计

智能全屋灯光系统方案设计 一、系统概述 本智能全屋灯光系统旨在为用户提供便捷、舒适、节能且个性化的照明体验&#xff0c;通过智能化的控制方式实现对全屋灯光的集中管理和灵活调控。 二、系统组成 1. 智能灯具 - 包括吸顶灯、吊灯、壁灯、台灯、筒灯、射灯等多种类型&#…

逆向题(23):nss:2956(花指令)

nss&#xff1a;2956&#xff08;花指令&#xff09; 打开主程序后&#xff0c;我们发现在这里有问题。而且跟之前学长讲的不一样。 我们学学长那样&#xff0c;先分解成数据&#xff0c;然后一步步从上往下按c去做&#xff0c;看看最后还会不会报错&#xff0c; 很显然没有…

28.<Spring博客系统⑤(部署的整个过程(CentOS))>

引入依赖 Spring-boot-maven-plugin 用maven进行打包的时候必须用到这个插件。看看自己pom.xml中有没有这个插件 并且看看配置正确不正常。 注&#xff1a;我们这个项目打的jar包在30MB左右。 <plugin><groupId>org.springframework.boot</groupId><artif…

力扣力扣力:860柠檬水找零

860. 柠檬水找零 - 力扣&#xff08;LeetCode&#xff09; 需要注意的是&#xff0c;我们一开始是没有任何钱的&#xff0c;也就是说我们需要拿着顾客的钱去找零。如果第一位顾客上来就是要找零那么我们无法完成&#xff0c;只能返回false。 分析&#xff1a; 上来我们先不分…

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

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

【动手学深度学习Pytorch】1. 线性回归代码

零实现 导入所需要的包&#xff1a; # %matplotlib inline import random import torch from d2l import torch as d2l import matplotlib.pyplot as plt import matplotlib import os构造人造数据集&#xff1a;假设w[2, -3.4]&#xff0c;b4.2&#xff0c;存在随机噪音&…

Keil基于ARM Compiler 5的工程迁移为ARM Compiler 6的工程

环境&#xff1a; keil版本为5.38&#xff0c;版本务必高于5.30 STM32F4的pack包版本要高于2.9 软件包下载地址&#xff1a;https://zhuanlan.zhihu.com/p/262507061 一、更改Keil中编译器 更改后编译&#xff0c;会报很多错&#xff0c;先不管。 二、更改头文件依赖 观察…

数据集-目标检测系列- 花卉 玫瑰 检测数据集 rose >> DataBall

数据集-目标检测系列- 花卉 玫瑰 检测数据集 rose >> DataBall DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 贵在坚持&#xff01; 数据样例项目地址&#xff1a; * 相关项目 1&#xff09;数据集可视化项…

Linux驱动编程 - kmalloc、vmalloc区别

目录 前言&#xff1a; 1、区别 2、使用差异 一、kmalloc、kzalloc、kfree 1、动态申请 1.1 kmalloc() 1.2 kzalloc() 2、内存释放 3、示例 二、vmalloc、vzalloc、vfree 1、动态申请 1.1 vmalloc() 1.2 vzalloc() 2、内存释放 3、示例 前言&#xff1a; Linux内…

使用低成本的蓝牙HID硬件模拟鼠标和键盘来实现自动化脚本

做过自动化脚本的都知道&#xff0c;现在很多传统的自动化脚本方案几乎都可以被检测&#xff0c;比如基于root&#xff0c;adb等方案。用外置的带有鼠标和键盘功能集的蓝牙HID硬件来直接点击和滑动是非常靠谱的方案&#xff0c;也是未来的趋势所在。 一、使用蓝牙HID硬件的优势…

VideoCrafter模型部署教程

一、介绍 VideoCrafter是一个功能强大的AI视频编辑和生成工具&#xff0c;它结合了深度学习和机器学习技术&#xff0c;为用户提供了便捷的视频制作和编辑体验。 系统&#xff1a;Ubuntu22.04系统&#xff0c;显卡&#xff1a;4090&#xff0c;显存&#xff1a;24G 二、基础…

#渗透测试#SRC漏洞挖掘#Python自动化脚本的编写05之多线程与多进程

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

C++多继承:一个子类继承多个父类的情况

C的类继承大家还算比较了解。它主要包括单继承、多继承、虚继承这几方面。 单继承就是一个子类只继承一个父类&#xff0c;多继承就是一个子类继承多个父类。 其实在C中&#xff0c;一个子类继承多个父类的情况还是比较常见的。比如&#xff0c;一个子类需要同时继承两个父类…

在windows电脑上安装docker服务

以下是在 Windows 电脑上安装 Docker 服务的详细步骤&#xff1a; 一、下载 Docker Desktop for Windows 系统要求&#xff1a;Windows 操作系统需要是 Windows 10&#xff08;64 位&#xff09;专业版、企业版或教育版&#xff0c;或者是 Windows 11。并且系统要开启了硬件虚…

单片机UART协议相关知识

概念 UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff0c;通用异步收发传输器&#xff09; 是一种 异步 串行 全双工 通信协议&#xff0c;用于设备一对一进行数据传输&#xff0c;只需要两根线&#xff08;TX&#xff0c;RX&#xff09;。 异步&…

XXL-JOB执行任务的SpringBoot程序无法注册到调度中心

文章目录 1. 问题呈现2. 问题产生的原因2.1 原因一&#xff1a;执行器和调度中心部署在不同的机器上2.2 原因二&#xff1a;调度中心部署在云服务器上 3. 解决方法3.1 方法一&#xff1a;将执行器和调度中心部署在同一台机器上3.2 方法二&#xff1a;手动指定执行器的ip地址&am…

Ettus USRP X410

总线连接器: 以太网 RF频率范围: 1 MHz 至 7.2 GHz GPSDO: 是 输出通道数量: 4 RF收发仪瞬时带宽: 400 MHz 输入通道数量: 4 FPGA: Zynq US RFSoC (ZU28DR) 1 MHz to 7.2 GHz&#xff0c;400 MHz带宽&#xff0c;GPS驯服OCXO&#xff0c;USRP软件无线电设备 Ettus USRP X410集…

哋它亢SEO技术分析:如何提升网站在搜索引擎中的可见性

文章目录 哋它亢SEO技术分析&#xff1a;如何提升网站在搜索引擎中的可见性网站的基本情况SEO优化分析与建议1. 元数据优化2. 关键词优化3. URL结构4. 图像优化5. 移动端优化6. 网站速度7. 结构化数据&#xff08;Schema Markup&#xff09;8. 内链与外链9. 社交分享 哋它亢SEO…

将网站地址改成https地址需要哪些材料

HTTPS&#xff08;安全超文本传输协议&#xff09;是HTTP协议的扩展。它大大降低了个人数据&#xff08;用户名、密码、银行卡号等&#xff09;被拦截的风险&#xff0c;还有助于防止加载网站时的内容替换&#xff0c;包括广告替换。 在发送数据之前&#xff0c;信息会使用SSL…

mongodb多表查询,五个表查询

需求是这样的&#xff0c;而数据是从mysql导入进来的&#xff0c;由于mysql不支持数组类型的数据&#xff0c;所以有很多关联表。药剂里找药物&#xff0c;需要药剂与药物的关联表&#xff0c;然后再找药物表。从药物表里再找药物与成分关联表&#xff0c;最后再找成分表。 这里…