Java - 你还在用 if...else... 初始化集合为 null 情况?
Posted 放羊的牧码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java - 你还在用 if...else... 初始化集合为 null 情况?相关的知识,希望对你有一定的参考价值。
故事背景
我们先来看一段代码(如下伪代码),应该不陌生吧~ 这就是我们平时在维护集合时,第一次为 null 初始化常用的模板,那么是否有更简洁的写法呢?当然有,否则我还写个锤子博文,答案 -> Java 8
Integer key = 1;
String value = "content";
Map<Integer, List<Object>> map = new HashMap();
if (!map.containsKey(key))
map.put(key, new ArrayList<>());
map.get(key).add(value);
光速代码
Integer key = 1;
String value = "content";
Map<Integer, List<Object>> map = new HashMap();
map.computeIfAbsent(key, k -> new ArrayList<>()).add(value);
原理分析
在 Java 8 的 Map 接口中,增加了一个computeIfAbsent,方法签名如下
default V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)
Function 是一个函数式接口
R apply(T t);
此方法首先判断缓存 map 中是否存在指定的 key 值,如果不存在,会自动调用mappingFunction(key) 计算 key 的 value,然后将 key = value 放入到缓存 map。如果mappingFunction(key) 返回的值为 null 或抛出异常,则不会有记录存入 map。
以上是关于Java - 你还在用 if...else... 初始化集合为 null 情况?的主要内容,如果未能解决你的问题,请参考以下文章
你还在用 Java 8?手把手教你从 Java 8 升级到 Java 17 全过程,真香!!