前言

Guava 本身适配不同的环境,Jdk 1.8 以上使用 jre flavor,Jdk 1.7 和 android 使用 android flavor。

类库的作者,不要使用 @Beta 成员,以后它们不会是 source-compatible。但我们可以使用其他成员,它们会是 binary-compatible,Guava 现在不会再因为非安全原因删除成员了,即使是 @Deprecated 的。

可用的功能见这个 User Guide

common

Collect

Multimap

这个数据结构首先是一个接口,有以下子接口: ListMultimap、SetMultimap。不同的子接口的 Get 方法返回不同的数据结构。

有两种方法可以理解这个数据结构:

1
2
3
4
<ul>
<li>a → 1, 2
<li>b → 3
</ul>

第一种形式同 Stream 的 groupingBy 的操作结果类似:

1
2
3
4
Map<MapKey, List<Object>> map = actionAggregates.stream()
.collect(Collectors.groupingBy(objs -> {
return new MapKey(obj.val1, obj.val2));
}));

第一种形式必须使用 asMap 创造一种视图,size 为 2。

1
2
3
4
5
<ul>
<li>a → 1
<li>a → 2
<li>b → 3
</ul>

第二种形式本身属于天然形式,size 为 3(非 list 形式的,意味着 total entry count)。

所有的方法,都是视图方法:

  • asMap(), mentioned above
  • keys(), keySet(), values(), entries(), which are similar to the corresponding view collections of Map
  • and, notably, even the collection returned by get(key) is an active view of the values corresponding to key 这一点很容易被忽略

Multimaps 是 Map> 更优秀的替代品。