我非常喜欢Google Guava库中的Multimap
类。它是一种映射类型,您可以为一个键添加多个值,因此它有效地将一个键映射到某种类型的集合中。我特别喜欢的是Multimaps.index()
函数,它接受一个Iterable
和一个键函数,并返回一个Multimap
,该函数通过函数返回每个元素的值来对Iterable
的元素进行分组(索引或映射)。
我发现有点奇怪的是 Multimap.values()
返回的是一个平面集合而不是集合的集合?所以,一旦我检索了这些值,索引功能给我的分组就会丢失。我可以通过调用Multimap.asMap()
,然后在其上调用values()
来解决这个问题。
有人知道为什么 Multimap
会这样表现吗?
keys()
进行迭代,并执行get(key)
以获取该键的值集合)。理解就是,如果您要求multimap中的所有值,则不关心相关的键,就像普通映射一样。对于所有其他情况,它都为您提供了一个实时视图,以将其视为Map<K,Collection<V>>
。您知道asMap
不会复制任何数据,对吧?它只是相同数据的不同视图,因此开销可以忽略不计。 - Mark Peters