Java Map 操作解锁新姿势
Java Map 解锁新姿势,相信绝大数人并不知晓;相信我,你懂的。
简单 Map 的操作
说到 Java Map 的操作,其实有很多种,但是归结起来无非就两种,其中一种便是简单 Map 的操作,
简单 Map
简单 Map 指的是:value 是个 atomic value,比如:
复制代码
上面的 K 是个 generic type(也就是泛型)。
复杂的 Map
所谓的复杂的 Map 指的就是,value 不是一个 atomic value,常见的一个情况就是 value 是一个 collection,比如:
复制代码
其实简单的 Map 操作起来还是比较方便的,这里不再一一举例。但是通常情况下我们使用的 Map 更多情况下是一个复杂 Map,如果像下面这样编写的一个代码,它就有可能抛出一个NullPointerException
复制代码
上述代码之所以会出现空指针的异常,主要原因就是当 map 并不包含 key 时。(map.get(key).add(val)
)也就等价于null.add(val)
在我们日常工作开发中通常采用的解决方案,代码如下:
复制代码
上述方案便可规避掉NullPointerException
异常,但是代码看上去过于冗长。
重点来了!解锁复杂 Map 避免空指针异常的简化代码
复制代码
代码是不是看上去简化清爽了许多。关于computeIfAbsent
的 Java 文档可以参考:computeIfAbsent
当然如此清爽代码的解决方案不止一种,比如还有Guava Multimap
使用 Guava Multimap 解锁新姿势(该方式代码更加简洁)
复制代码
该方法唯一不足的一点就是Guava
并不是 Java 标准库的一部分,所以如果想使用 Guava Multimap 来解决的话需要通过 Maven dependency 在你的项目中引入 Guava;如下方式
复制代码
关于 Multimap 的 Java 文档在此处:Multimap
评论