Map不支持stream,但有好用的方法

前言

本文主要介绍Map中常用的方法,对应实现的功能

这里我们先初始化一个map,并设置5个key,对应的value为"val+key“,然后开始我们的方法测试

Map<Integer, String> map = new HashMap<>();
for (int i = 1; i <= 5; i++) {
	map.put(i, "val" + i);
}

1、forEach

依次执行元素

map.forEach((k,v)-> System.out.println(k+":"+v));

// 输出结果
1:val1
2:val2
3:val3
4:val4
5:val5

2、containsKey

判断是否存在某个key

 map.containsKey(1); // true
 map.containsKey(6); // false

3、containsValue

判断是否存在某个value

map.containsValue("val1"); // true
map.containsValue("val6"); // false

4、putIfAbsent

不存在才插入
如果key存在,不做操作,并返回已有值,如果key不存在,插入成功,返回null加粗样式

map.putIfAbsent(1, "new1"); // val1
map.get(1); // val1
map.putIfAbsent(6, "new6"); // null
map.get(6); // new6

5、computeIfAbsent

和putIfAbsent 类似,不存在才插入,只不过是在插入新值时可以使用Function对象进行计算
如果key存在,不做操作,并返回已有值,如果key不存在,插入成功,并返回新值

map.computeIfAbsent(1, num -> "new" + num); // val1
map.get(1); // val1
map.computeIfAbsent(6, num -> "val" + 6); // val6
map.get(6); // val6

6、computeIfPresent

替换已存在key的值,可以使用BiFunction对象进行计算
如果存在,就替换;不存在,不做操作;

map.computeIfPresent(1, (key, val) -> "new1"); // new1
map.get(1); // new1
map.computeIfPresent(6, (key, val) -> "new6"); // null
map.get(6); // null

7、remove

删除一个键值全都匹配的项

map.remove(1,"val2");
map.get(1); // val1
map.remove(1,"val1");
map.get(1); // null

8、getOrDefault

找不到就设默认值

map.getOrDefault(1,"空"); // val1
map.getOrDefault(6,"空"); // 空

9、merge

对元素做合并
如果key不存在则插入,否则对key对应的值做合并操作,并重新插入到map中

map.merge(1, "new1", (value, newValue) -> value.concat(newValue)); // val1new1
map.get(1); // val1new1
map.merge(6, "new6", (value, newValue) -> value.concat(newValue)); // new6
map.get(6); // new6
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
是的,Map 接口提供了一些方法支持使用 Stream 流进行操作。你可以将 Map 转换为 Stream 流,然后使用流的操作方法进行过滤、映射、排序等操作。 下面是一些常用的与 Stream 相关的 Map 方法: - `entrySet()`: 将 Map 转换为包含键值对的 Set 集合。 - `keySet()`: 将 Map 的键转换为 Set 集合。 - `values()`: 将 Map 的值转换为 Collection 集合。 - `forEach(BiConsumer)`: 对 Map 中的每个键值对执行指定的操作。 - `stream()`: 将 Map 转换为顺序流(Stream)。 - `parallelStream()`: 将 Map 转换为并行流(ParallelStream)。 这些方法可以使你更方便地在 Map 上使用 Stream 流操作。例如,你可以使用 `entrySet()` 方法Map 转换为键值对的 Set,然后使用 Stream 流对键值对进行过滤、映射等操作。 以下是一个示例代码,展示了如何使用 Stream 流操作 Map: ```java import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("A", 1); map.put("B", 2); map.put("C", 3); map.put("D", 4); // 使用 Stream 过滤出值大于 2 的键值对,并打印出结果 map.entrySet() .stream() .filter(entry -> entry.getValue() > 2) .forEach(entry -> System.out.println(entry.getKey() + ": " + entry.getValue())); } } ``` 在上述示例中,我们首先创建了一个包含键值对的 Map。然后,我们使用 `entrySet().stream()` 将 Map 转换为 Stream 流。接着我们使用 `filter()` 方法筛选出值大于 2 的键值对,并使用 `forEach()` 方法打印出结果。输出结果是键 "C" 和对应的值 3。 这只是 Stream 流操作 Map 的一个简单示例,你可以根据具体需求使用不同的流操作方法来对 Map 进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Forlan

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值