254. Java 集合 - 使用 Lambda 表达式操作 Map 的值

254. Java 集合 - 使用 Lambda 表达式操作 Map 的值

1. 🛠️ 使用 forEach() 方法遍历 Map 内容

Java 中,Map 接口提供了 forEach() 方法,这个方法允许你遍历 Map 中的键值对,并对每个元素进行操作。它的使用与 Iterable 接口中的 forEach() 方法类似,唯一的区别是,MapforEach() 方法接受的是一个 BiConsumer ,而不是一个普通的 Consumer

📖 示例:遍历 Map 输出键值对

java 复制代码
import java.util.*;

public class MapForEachExample {
    public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<>();
        map.put(1, "one");
        map.put(2, "two");
        map.put(3, "three");

        // 使用 lambda 表达式遍历 Map
        map.forEach((key, value) -> System.out.println(key + " :: " + value));
    }
}

🖨️ 输出结果:

java 复制代码
1 :: one
2 :: two
3 :: three

✅ 这里,map.forEach((key, value) -> System.out.println(key + " :: " + value)) 是一个简洁 的方式来遍历 Map 中的所有键值对。keyvalue 被传递给 lambda 表达式,然后我们打印它们。


2. 🔄 替换 Map 中的值

Map 接口提供了几种替换 Map 中值的方法,允许你根据特定的条件替换绑定到键上的值。

1️⃣ 使用 replace(key, value) 替换值

这个方法是最简单的,它直接用新值替换指定键的旧值。它的行为相当于 "put-if-present" 操作。换句话说,只有当该键已存在时,才会进行替换。

java 复制代码
Map<Integer, String> map = new HashMap<>();
map.put(1, "one");
map.put(2, "two");
map.put(3, "three");

// 替换键 2 对应的值
map.replace(2, "TWO");

map.forEach((key, value) -> System.out.println(key + " :: " + value));

🖨️ 输出结果:

java 复制代码
1 :: one
2 :: TWO
3 :: three

map.replace(2, "TWO")"TWO" 替换了键 2 对应的旧值 "two"


2️⃣ 使用 replace(key, oldValue, newValue) 方法进行更细粒度的控制

有时,你可能希望只有在旧值和预期值匹配时才替换replace(key, oldValue, newValue) 方法允许你实现这一需求。如果当前值与 oldValue 匹配,则替换为 newValue,否则不做操作。

java 复制代码
Map<Integer, String> map = new HashMap<>();
map.put(1, "one");
map.put(2, "two");
map.put(3, "three");

// 只有当值为 "two" 时,才替换为 "TWO"
boolean result = map.replace(2, "two", "TWO");
System.out.println("Replacement successful: " + result);

map.forEach((key, value) -> System.out.println(key + " :: " + value));

🖨️ 输出结果:

java 复制代码
Replacement successful: true
1 :: one
2 :: TWO
3 :: three

✅ 这里,map.replace(2, "two", "TWO") 替换了键 2 的值,从 "two" 替换成了 "TWO",并返回了 true,表示替换成功。


3️⃣ 使用 replaceAll() 替换所有值

如果你希望批量替换 Map 中所有的值,可以使用 replaceAll() 方法。它接收一个 BiFunction,这个函数会对每个键值对进行处理,计算并返回新值来替换原有值。

📖 示例:将所有的值转换为大写字母
java 复制代码
Map<Integer, String> map = new HashMap<>();
map.put(1, "one");
map.put(2, "two");
map.put(3, "three");

map.replaceAll((key, value) -> value.toUpperCase());  // 将所有值转换为大写

map.forEach((key, value) -> System.out.println(key + " :: " + value));

🖨️ 输出结果:

java 复制代码
1 :: ONE
2 :: TWO
3 :: THREE

replaceAll() 方法遍历 Map 中的每个键值对,并将每个值都转换为大写字母。


3. ⚙️ 总结:replace 系列方法

方法 功能说明 返回值
replace(key, value) 直接替换键对应的值,如果键存在,则替换,否则不做操作 被替换的旧值
replace(key, oldValue, newValue) 只有当当前值等于 oldValue 时才会替换为 newValue 是否替换成功(truefalse
replaceAll(BiFunction) 批量替换所有的值,BiFunction 处理每个键值对 无返回值

🎯 互动问题

问题1map.replace(2, "two", "TWO") 为什么返回值为 true

答案示例:因为 map.replace(2, "two", "TWO") 在键 2 的值为 "two" 时,成功地将其替换成了 "TWO",因此返回 true

问题2map.replaceAll((key, value) -> value.toUpperCase()) 中的 replaceAll 方法如何工作?

答案示例:replaceAll() 方法会遍历 Map 中的所有键值对,然后对每个值应用提供的 BiFunction,并用返回的新值替换原有值。在这个例子中,所有的值都变成了大写字母。

问题3 :如果 Map 中的键不存在,map.replace(key, value) 会发生什么?

答案示例:如果键不存在,replace(key, value) 什么也不做,原值保持不变,并且返回值为 null

相关推荐
雨季66615 小时前
Flutter 三端应用实战:OpenHarmony “专注时光盒”——在碎片洪流中守护心流的数字容器
开发语言·前端·安全·flutter·交互
tao35566716 小时前
【用AI学前端】HTML-02-HTML 常用标签(基础)
前端·html
2601_9495328416 小时前
Psello HTML Template: A Developer‘s Deep-Dive Review and Guide - Download Free
前端·windows·html·seo·wordpress·gpl
CappuccinoRose16 小时前
CSS前端布局总指南
前端·css·学习·布局·flex布局·grid布局·float布局
穿过锁扣的风16 小时前
如何操作HTML网页
前端·javascript·html
San30.16 小时前
从零构建坚固的前端堡垒:TypeScript 与 React 实战深度指南
前端·react.js·typescript
Loo国昌16 小时前
【垂类模型数据工程】第四阶段:高性能 Embedding 实战:从双编码器架构到 InfoNCE 损失函数详解
人工智能·后端·深度学习·自然语言处理·架构·transformer·embedding
yunhuibin16 小时前
VideoPipe环境搭建及编译ubuntu240403
前端·人工智能
CHANG_THE_WORLD17 小时前
PDF文档结构分析 一
前端·pdf
ONE_PUNCH_Ge17 小时前
Go 语言泛型
开发语言·后端·golang