# 开发趋势 Java Lambda 表达式 第三篇

news/2024/9/8 4:05:24/

开发趋势 Java Lambda 表达式 第三篇

在这里插入图片描述

一,Lambda 整合集合+常规操作

List

Java Lambda 表达式可以与List集合和常规操作进行整合,以提供一种更简洁、更可读的代码编写方式。以下是几个示例:

  1. 集合遍历操作:
List<String> names = Arrays.asList("John", "Mary", "Alice");// 使用 foreach 循环遍历
names.forEach(name -> System.out.println(name));// 使用 Stream API 进行遍历
names.stream().forEach(name -> System.out.println(name));
  1. 常规操作:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);// 使用 reduce 方法求和
int sum = numbers.stream().reduce(0, (num1, num2) -> num1 + num2);
System.out.println(sum);// 使用 filter 方法过滤元素
List<Integer> evenNumbers = numbers.stream().filter(number -> number % 2 == 0).collect(Collectors.toList());
System.out.println(evenNumbers);// 使用 map 方法对元素进行映射操作
List<String> names = numbers.stream().map(number -> "Name" + number).collect(Collectors.toList());
System.out.println(names);

Map

Lambda 表达式允许程序员在不需要编写冗长代码的情况下进行更复杂的操作。而与集合和常规操作相结合,使用 Lambda 表达式可以使代码更加简洁、可维护和易读,并且可以提高生产力。

使用 Lambda 表达式和 Map 集合结合,可以实现对集合中元素的映射、过滤、聚合等常规操作。以下是几个示例:

  1. 遍历 Map 集合:
Map<String, Integer> scores = new HashMap<>();
scores.put("John", 90);
scores.put("Mary", 80);
scores.put("Alice", 85);// 遍历 Map 的键值对
scores.forEach((name, score) -> System.out.println(name + " : " + score));// 遍历 Map 的键
scores.keySet().forEach(key -> System.out.println(key));// 遍历 Map 的值
scores.values().forEach(value -> System.out.println(value));
  1. 过滤操作:
Map<String, Integer> scores = new HashMap<>();
scores.put("John", 90);
scores.put("Mary", 80);
scores.put("Alice", 85);// 过滤出分数大于 85 的元素
Map<String, Integer> filteredScores = scores.entrySet().stream().filter(entry -> entry.getValue() > 85).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));System.out.println(filteredScores);
  1. 映射操作:
Map<String, Integer> scores = new HashMap<>();
scores.put("John", 90);
scores.put("Mary", 80);
scores.put("Alice", 85);// 将每个分数增加 5 分
Map<String, Integer> updatedScores = scores.entrySet().stream().map(entry -> {entry.setValue(entry.getValue() + 5);return entry;}).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));System.out.println(updatedScores);
  1. 聚合操作:
Map<String, Integer> scores = new HashMap<>();
scores.put("John", 90);
scores.put("Mary", 80);
scores.put("Alice", 85);// 计算所有分数的平均值
double averageScore = scores.values().stream().mapToInt(Integer::intValue).average().orElse(0);System.out.println(averageScore);

通过使用 Lambda 表达式与 Map 集合相结合,可以以更简洁、流畅的方式对集合中的元素进行操作。我们可以使用 forEach 方法遍历 Map 的键值对或键/值;使用 filter 方法过滤出符合条件的元素;使用 map 方法对元素进行映射操作;使用 reduce 或聚合方法对元素进行汇总等操作。这种结合可以帮助我们更高效地处理 Map 集合中的数据。

Set

使用 Lambda 表达式和 Set 集合结合,可以实现对集合中元素的映射、过滤、聚合等常规操作。以下是几个示例:

  1. 遍历 Set 集合:
Set<String> names = new HashSet<>();
names.add("John");
names.add("Mary");
names.add("Alice");// 使用 forEach 遍历 Set
names.forEach(name -> System.out.println(name));// 使用 Stream API 进行遍历
names.stream().forEach(name -> System.out.println(name));
  1. 过滤操作:
Set<Integer> numbers = new HashSet<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
numbers.add(5);// 过滤出偶数元素
Set<Integer> evenNumbers = numbers.stream().filter(number -> number % 2 == 0).collect(Collectors.toSet());
System.out.println(evenNumbers);
  1. 映射操作:
Set<Integer> numbers = new HashSet<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);// 将每个元素乘以 2
Set<Integer> mappedNumbers = numbers.stream().map(number -> number * 2).collect(Collectors.toSet());System.out.println(mappedNumbers);
  1. 聚合操作:
Set<Integer> numbers = new HashSet<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
numbers.add(5);// 计算所有元素的和
int sum = numbers.stream().reduce(0, (num1, num2) -> num1 + num2);
System.out.println(sum);

通过使用 Lambda 表达式与 Set 集合相结合,可以以更简洁、流畅的方式对集合中的元素进行操作。我们可以使用 forEach 方法遍历 Set;使用 filter 方法过滤出符合条件的元素;使用 map 方法对元素进行映射操作;使用 reduce 或聚合方法对元素进行汇总等操作。这种结合可以帮助我们更高效地处理 Set 集合中的数据。

Lambda 表达式的局限性

尽管 Lambda 表达式提供了一种简洁、灵活的编程方式,但也存在一些局限性。以下是 Lambda 表达式的一些局限性:

  1. 必须满足函数接口要求:Lambda 表达式必须与函数接口(只有一个抽象方法的接口)相匹配。这意味着 Lambda 表达式不能用于任意的方法或任意的接口。

  2. 缺乏可读性:过于复杂的 Lambda 表达式可能降低代码的可读性。当 Lambda 表达式变得很长或包含复杂逻辑时,可读性可能会受到影响。

  3. 无法使用非 final 变量:在 Lambda 表达式中使用的局部变量必须是 final 或 effectively final(在变量声明后不再修改)。这是因为 Lambda 表达式捕获变量时实际上是创建了一个新的变量副本,并且这个副本必须保持不可变。

  4. 不支持跳出多层嵌套循环:Lambda 表达式内部无法使用 break 或 continue 关键字跳出多层嵌套循环。它只能在当前循环内部进行断言。

  5. 难以调试:相对于传统的方法和类,Lambda 表达式的调试可能会更加困难。由于 Lambda 表达式是匿名函数,调试时可能难以追踪和定位问题。

  6. 可能引发性能问题:虽然 Lambda 表达式提供了便利的语法,但在某些情况下可能导致性能问题。Lambda 表达式会引入额外的开销,尤其是在需要进行大量迭代或频繁调用时。

尽管存在这些局限性,Lambda 表达式仍然是 Java 8 引入的重要特性,可以帮助我们编写更简洁、易读的代码,并促进函数式编程思想的应用。对于大多数常规的编程任务,Lambda 表达式仍然是一种强大而实用的工具。


http://www.ppmy.cn/news/1172111.html

相关文章

Vector3(即是位置,也是方向)

在三维世界中&#xff0c;最重要的就是确定物体在三维世界中 的位置、大小和缩放等信息。在Unity中&#xff0c;Vector3结构体就是用来表示这些信息的&#xff0c;此外也用Vector2来表示二维世界中的信息。 Vector3结构体由x、y、z这3个数值组成&#xff0c;表示了一个向量&am…

BMS电池管理系统理论基础

目录 1 、锂离子电池特性分析 1.1、 锂离子电池工作原理 1.2 锂离子电池特性 (1)容量特性

【C++】继承 ⑧ ( 继承 + 组合 模式的类对象 构造函数 和 析构函数 调用规则 )

文章目录 一、继承 组合 模式的类对象 构造函数和析构函数调用规则1、场景说明2、调用规则 二、完整代码示例分析1、代码分析2、代码示例 一、继承 组合 模式的类对象 构造函数和析构函数调用规则 1、场景说明 如果一个类 既 继承了 基类 ,又 在类中 维护了一个 其它类型 的…

比例运算放大电路为什么要加平衡电阻

这个是反相比例运算放大电路&#xff0c;输出电压等于-Rf/R1乘以输入电压。 这个是同相比例运算放大电路&#xff0c;输出电压等于1Rf/R1乘以输入电压。 大家可以看到这两个电路中&#xff0c;都有一个电阻R2&#xff0c;反相比例运算放大电路放在同相端到地&#xff0c;同相比…

GoLong的学习之路(四)语法之循环语句

书接上回&#xff0c;上回说到运算符&#xff0c;这次我们说一个编程语言中最重要的一点&#xff1a;流程控制&#xff0c;及循环语句 文章目录 循环语句if else(分支结构)if条件判断特殊写法 for(循环结构)for range(键值循环) switch casegoto(跳转到指定标签)break(跳出循环…

轻松修复缺少concrt140.dll,一键修复dll丢失问题

在电脑使用过程中&#xff0c;我们常常会遇到一些错误提示&#xff0c;其中之一就是“由于找不到concrt140.dll无法继续执行代码”。这个问题可能是由于系统文件丢失、损坏或被病毒感染等原因引起的。为了解决这个问题&#xff0c;我整理了以下五个解决方案&#xff0c;希望能对…

拼团小程序制作技巧大揭秘:零基础也能轻松掌握

随着拼团模式的日益流行&#xff0c;越来越多的商家和消费者开始关注拼团小程序的制作。对于没有技术背景的普通人来说&#xff0c;制作一个拼团小程序似乎是一项艰巨的任务。但实际上&#xff0c;选择一个简单易用的第三方平台或工具&#xff0c;可以轻松完成拼团小程序的制作…

oninput和onchange事件有什么区别以及使用场景

oninput和onchange都是常见的表单元素的事件&#xff0c;它们的区别在于触发的时机不同。 oninput事件会在表单元素的值发生变化时立刻触发&#xff0c;无论是通过键盘输入、粘贴、剪切、拖拽等方式&#xff0c;都能实时响应。比如&#xff1a; <input type"text&quo…

IPD集成产品开发TR技术评审详解

IPD&#xff08;Integrated Product Development&#xff09;集成产品开发是一种跨部门协同的、利用先进技术和管理方法来快速推出新产品并满足客户需求的开发模式。华为利用IPD也非常出名。在IPD集成产品开发的过程中&#xff0c;TR&#xff08;Technical Review&#xff09;技…

RHCE---Shell基础 2

文章目录 目录 文章目录 前言 一.变量 概述 定义 自定义变量 环境变量 概述&#xff1a; 定义环境变量&#xff1a; 位置变量 "$*"会把所有位置参数当成一个整体&#xff08;或者说当成一个单词 变量的赋值和作用域 read 命令 变量和引号 变量的作用域 变…

Amazon图片下载器:利用Scrapy库完成图像下载任务

概述 本文介绍了如何使用Python的Scrapy库编写一个简单的爬虫程序&#xff0c;实现从Amazon网站下载商品图片的功能。Scrapy是一个强大的爬虫框架&#xff0c;提供了许多方便的特性&#xff0c;如选择器、管道、中间件、代理等。本文将重点介绍如何使用Scrapy的图片管道和代理…

无约束优化算法

第六章 无约束优化算法 本章考虑如下无约束优化问题 min ⁡ x ∈ R n f ( x ) (6.0.1) \min_{x{\in}R^n}f(x)\tag{6.0.1} x∈Rnmin​f(x)(6.0.1) 其中 f ( x ) f(x) f(x)是 R n → R R^n{\rightarrow}R Rn→R的函数&#xff0c;无约束优化问题是众多优化问题中最基本的问题&a…

【JavaEE】线程安全的集合类 -- 多线程篇(9)

线程安全的集合类 多线程环境使用 ArrayList多线程环境使用队列多线程环境使用哈希表 多线程环境使用 ArrayList 自己使用同步机制 (synchronized 或者 ReentrantLock)Collections.synchronizedList(new ArrayList); synchronizedList 是标准库提供的一个基于 synchronized 进…

ES1:index、type、document、mapping之间的关系

1.1 引言 由于长期使用es&#xff0c;但是对于es的大体结构存在疑惑&#xff0c;于是在此做一个大致总结。 1.2 数据存储结构 在 7.0版本之前&#xff0c;es的数据结构如下&#xff1a; 提示&#xff1a; 通过上图可知&#xff0c;在7.0之前elasticsearch的结构层级是&#…

[Python进阶] 目录相关库:os、pathlib、shutil

6.11 目录相关&#xff1a;os、pathlib、shutil 6.11.1 遍历目录(包含子目录) from icecream import ic import osp1 rG:\TCL for _ in os.walk(p1):ic(_)# 获取目录中所有文件名 files [] for dirpath, dirnames, filenames in os.walk(p1):files.extend(os.path.join(dir…

项目十一文件的应用

认识文件 概述 文件对大家来说很熟悉,常见的有txt文本文档,办公用的word文档等,主要作用就是保存数据 在C语言中,文件时计算机领域的一个重要概念,通常指存储在外部介质上数据的集合。操作系统以文件为单位对数据进行管理,以文件名访问文件。 分类 按文件内容划分源…

大模型的实践应用3-大模型的基础架构Transformer模型,掌握Transformer就掌握了大模型的灵魂骨架

大家好,我是微学AI,今天给大家介绍一下大模型的实践应用3-大模型的基础架构Transformer模型,掌握Transformer就掌握了大模型的灵魂骨架。Transformer是一种基于自注意力机制的深度学习模型,由Vaswani等人在2017年的论文《Attention is All You Need》中提出。它最初被设计用…

STM32F4X之中断二

一、外部中断 外部中断&#xff1a;外部中断的中断是相对于外部中断控制器&#xff08;EXTI&#xff09;来说&#xff0c;如下图所示&#xff1a; EXTI掌管着23根中断线&#xff0c;具体分布图下&#xff1a; 16根连接GPIO口&#xff0c;如下图&#xff1a; 所有的0口连接到中…

网络拓扑图怎么画最好?

你们好&#xff0c;我的网工朋友。 好久没和你们聊拓扑图了&#xff0c;群里总是不乏有人问&#xff0c;拓扑图怎么设计&#xff0c;怎么配置&#xff0c;或者让大佬看看自己做的这图有没有啥问题的…… 画拓扑图的方式有很多&#xff0c;在线软件&#xff0c;Visio&#xff…

【项目经理】工作流引擎

项目经理之 工作流引擎 一、业务系统管理目的维护信息 二、组织架构管理目的维护信息 三、角色矩阵管理目的维护信息 四、条件变量管理目的维护信息 五、流程模型管理目的维护信息 六、流程版本管理目的维护信息 七、流程监管控制目的维护信息 系列文章版本记录 一、业务系统管…