如何从Guava MultiMap中获取每个条目以及与之关联的相应值?



我正在阅读一个巨大的csv文件,其中包含重复的条目。我能够将整个csv文件读取到Multimap中。我还能够获得具有重复值的键集并将它们写入文件。我想获得与每个键相关联的值并将其写入文件,但无法这样做。我似乎找不到任何可能对我有帮助的选择。我尝试使用entries()方法,根据文档

返回包含在multimap中的所有键值对的视图集合,如Map.Entry实例

但我不能从中得到任何东西。

我使用ArrayListMultiMap实现MultiMap。使用ArrayList的原因是,后来我需要在ArrayList中执行更快的搜索操作。

我已经将密钥集存储为MultiSet,这就是为什么我能够获得所有重复密钥的原因。

每个键的值都是一个对象,我希望将其写入与所读键对应的文件

如果您希望每个键和每个值与该键相关联,而不是每个键-值对,那么您可以使用

for (Map.Entry<String, Collection<SomeClassObject>> entry : multimap.asMap().entrySet()) {
   String key = entry.getKey();
   Collection<SomeClassObject> valuesForKey = entry.getValue();
   // do whatever
}

正如您所发现的,有两种方法来考虑Multimaps。一个是作为Map<K, Collection<V>>,另一个是作为Map<K, V>,其中的键不必是唯一的。在文档中,Google强调首选后一种方法,尽管如果按照Louis的建议执行multimap.asMap().entries()(注意,不仅仅是multimap.entries()),您将获得与前一版本类似的条目。

对于你的特殊问题,我不知道你为什么不能这样做:

for (String key : multimap.keySet()) {
    Collection<SomeClassObject> values = multimap.get(key);
    //Do whatever with all the values for Key key...
}