[优雅代码]-调用java集合Map.computeIfAbsent()方法

java版本JDK1.8
Map是我们经常使用的,在面对复杂Map时,我们怎么更好的去维护呢?

这里的复杂Map就是<K,V>中V是一个Collection集合比如:
在这里插入图片描述
那么它是一个复杂Map,如果一个<K,V>的V是Integer这种atomic value,那就不是复杂Map。

无论是开发还是在刷题中,我们经常做这种操作,
在这里插入图片描述
我们先拿到Key值对应的Collection,再往Collection中加入元素。但是这会出现一个问题!!!
可能这个Collection根本不存在。
那么代码就变成这样了。
在这里插入图片描述
所以,为了不抛出异常,
你的代码需要能够处理key不在map里的情况。
你可能会这样处理。
在这里插入图片描述
也就是当key不在map中时,提前new 一个 Collection放进去。
虽然这样不会抛出异常类,但是代码却变复杂了,怎么简化这段代码呢??
我们的 map.computeIfAbsent();方法就派上用场了。
在这里插入图片描述computeIfAbsent()意思时当key不在Map中时,做操作。

使用一行代码,代替三行代码。

computeIfAbsent方法是顶级接口Map中的方法。所以只要是实现l了Map接口的实现类时,都可以使用这个方法。

computeIfAbsent简单介绍

computeIfAbsent() 方法对 hashMap 中指定 key 的值进行重新计算,如果不存在这个 key,则添加到 Map 中。

computeIfAbsent() 方法的语法为:

hashmap.computeIfAbsent(K key, Function remappingFunction)
注:hashmap 是 HashMap 类的一个对象。

参数说明:

key - 键
remappingFunction - 重新映射函数,用于重新计算值

返回值

如果 key 对应的 value 不存在,则使用获取 remappingFunction 重新计算后的值,并保存为该 key 的 value,否则返回 value。

参照:
油管博主SchelleyYuki
jdk1.8 Map<K,V>.computeIfAbsent源码注解

`map.computeIfAbsent()` 是 Java 中的一个方法,它用于在 Map 中根据指定的键计算并返回对应的值,如果键不存在,则使用提供的函数来计算该值并将其插入到 Map 中。 这个方法的签名如下: ``` default V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction) ``` 参数说明: - `key`:要查询或插入的键。 - `mappingFunction`:一个函数,用于根据给定的键计算值的函数。 该方法的作用是: - 如果 Map 中已经存在指定的键,则返回与该键关联的值。 - 如果 Map 中不存在指定的键,则使用提供的函数计算一个值,并将该键及其对应的值插入到 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<>(); // 使用 computeIfAbsent 插入新键值对 int value1 = map.computeIfAbsent("key1", k -> k.length()); System.out.println(value1); // 输出:4 // 使用 computeIfAbsent 获取已存在的值 int value2 = map.computeIfAbsent("key1", k -> k.length() + 1); System.out.println(value2); // 输出:4 } } ``` 在上面的示例中,我们首先使用 `computeIfAbsent` 方法将键 `"key1"` 和其对应的值 `4` 插入到了 Map 中。然后再次调用 `computeIfAbsent` 方法时,由于键 `"key1"` 已经存在于 Map 中,因此不会再次计算值,而是直接返回原来的值 `4`。 希望这个解答能够帮助到你!如有更多问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

菜鸟猫喵喵

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

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

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

打赏作者

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

抵扣说明:

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

余额充值