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 情况?的主要内容,如果未能解决你的问题,请参考以下文章

你还在用迭代器处理集合吗?试试Stream,真香!

你还在用 Java 8?手把手教你从 Java 8 升级到 Java 17 全过程,真香!!

Java 你还在用lsit.contain做去重? 你是故意的还是不小心的?

别在再满屏的 if/ else 了,试试策略模式,真香!!

你还在用for循环遍历list吗?

JDK11都发布了,你还在用JDK6?