Java 如何从Guava MultiMap中获取每个条目及其相应的值?

Java 如何从Guava MultiMap中获取每个条目及其相应的值?,java,csv,guava,multimap,Java,Csv,Guava,Multimap,我正在读取一个巨大的csv文件,其中包含重复的条目。我能够将整个csv文件读入一个Multimap。我还能够获得具有重复值的密钥集并将其写入文件。我想获取与每个键关联的值并将其写入文件,但无法这样做。我似乎找不到任何可能对我有帮助的选择。我尝试使用entries()方法,该方法根据 返回此多重映射中包含的所有键值对的视图集合,如Map.Entry实例 但我无法从中得到任何东西 我正在使用ArrayListMultiMap实现MultiMap。使用ArrayList的原因是以后我需要在ArrayL

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

返回此多重映射中包含的所有键值对的视图集合,如
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
}
for(Map.Entry:multimap.asMap().entrySet()){
String key=entry.getKey();
集合值rkey=entry.getValue();
//做任何事
}

正如您所发现的,有两种方法可以考虑多重贴图。一个是作为
映射
,另一个是作为
映射
,其中键不必是唯一的。在中,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...
}
for(字符串键:multimap.keySet()){
集合值=multimap.get(键);
//对键的所有值执行任何操作。。。
}

您能否将这一点说得更清楚一些:1。你所做的(最好是代码)2。你想做什么(最好举个例子)。请看:因此您得到了一个有效的
Multimap
,您需要给定键的所有值,以便可以将它们放在单个文件中?@Edd它更像Multimap。我已经能够获得所有字符串(包括重复的字符串)作为键集,但现在希望获得与每个键相关联的SomeClassObject,最好是同时获得,以便我可以将它们作为记录写入文件。感谢您的回复。这并不能解决我的问题。这是我的想法,我很确定我错了,因为我已经做了3个小时没有进展。只有10把独特的钥匙。每个键都有1000个与之关联的值。现在,因为最终我想对包含相同数据的两个文件进行比较,所以我计划列出每个值及其键。因此,我最终将收集10个bis列表。然后,我想比较这两种方法,然后进一步进行。这是我的用例。你认为我的想法正确吗?没什么不对的。我不明白你的问题出在哪里。我无法获得每个唯一键的1000个值的列表。按照您的示例,在完全填充valuesForKey之后,它将再次作为元素添加到更高的超级列表中?我应该选择什么样的收藏来实现这一点?如果我尝试使用ArrayList执行某些操作,会出现“内存不足”错误。“它将再次作为元素添加到更高的超级列表中?”什么?这是您的方法的一部分,还是您认为Multimap需要的东西?(它不是。)给我们看给你错误的代码。我现在的问题是,如果我使用你的代码,它只拾取一个“条目”及其对应的值。因此,如果我总共有10000条记录,我只得到2000条与一个键相关的记录。如果我在while循环中使用迭代器并用它遍历键集,它就会卡住。如果我尝试这样做,它就不会像前面提到的那样给我“每个”键的值。它只需要拿起一个“键”并打印它的所有值。它不是按顺序开始的,只是拾取一个随机值。如果keyset中的所有键都是唯一的(我知道这一点),那么为什么它只拾取一个键呢?我刚刚调试过,它确实读取了keyset中的每个值,但它只保留最后一个键并显示与其相关的值。我错误地说它是拾取一个随机键,而是遍历每个条目,但在遍历时删除它们,因此只保留最后一个。哪个集合将使它保留所有条目而不仅仅是最后一个条目?在阅读完每个条目后,我将该列表添加到集合的另一个ArrayList中,然后我能够获得每个键及其所有关联值。