Java 从多值映射获取具有相同键的所有对象

Java 从多值映射获取具有相同键的所有对象,java,apache-commons,apache-commons-collection,Java,Apache Commons,Apache Commons Collection,我有一张地图,我正试图从中[打印出这个问题的目的]出所有使用同一个键放在地图中的路径 这是我当前的解决方案: MultiValueMap<Integer, Path> duplicates = duplicateFinder.getDuplicates(); for (Map.Entry<Integer, Object> entry: duplicates.entrySet()) { final Integer key = entry.getKey(); fin

我有一张地图,我正试图从中[打印出这个问题的目的]出所有使用同一个键放在地图中的路径

这是我当前的解决方案:

MultiValueMap<Integer, Path> duplicates = duplicateFinder.getDuplicates();

for (Map.Entry<Integer, Object> entry: duplicates.entrySet()) {
  final Integer key = entry.getKey();
  final Object obj = entry.getValue();
  for (Object o: (LinkedList)((ArrayList)entry.getValue()).get(0))
    System.out.println(o);
  System.out.println();
}
MultiValueMap duplicates=duplicateFinder.getDuplicates();
对于(Map.Entry:duplicates.entrySet()){
final Integer key=entry.getKey();
最终对象obj=entry.getValue();
对于(对象o:(LinkedList)((ArrayList)entry.getValue()).get(0))
系统输出打印ln(o);
System.out.println();
}
我觉得我的解决方案是危险的(施法和魔法数字0),并希望避免它。
如何以更具可读性/更安全的方式实现所需的结果?

条目集似乎是用一个不幸的签名声明的。但是您可以迭代这些键,并为每个键调用
getCollection

for (Integer key : duplicates.keySet()) {
    Collection<Path> paths = duplicates.getCollection(key);
    System.out.println("Paths for " + key);
    for (Path path : paths) {
        System.out.println("  " + path);
    }
    System.out.println();
}
for(整数键:重复的.keySet()){
集合路径=重复项。getCollection(键);
System.out.println(“用于“+键的路径”);
用于(路径:路径){
System.out.println(“+path”);
}
System.out.println();
}

(请注意,Guava's将允许您改用
duplicates.asMap().entrySet()
,并且每个条目都将有一个
集合作为值…)

@SotiriosDelimanolis Error:(35,41)java:不兼容的类型:java.lang.Object无法转换为java.util.List不声明为
多值映射是什么意思?在我的代码清单的第一行中显示了这一偏差。@SotiriosDelimanolis:我同意这是有意义的,但API文档似乎不支持这一点。我发现了错误。它在节目的其他地方<代码>多值映射
被包含
路径
s而不是
路径
s的
链接列表
s填充。我感到奇怪的是,它不能确保我尝试输入的任何东西都有一个
路径
@Pétur,这是因为他们莫名其妙地让它实现了
映射
;他们无法让它实现
映射
,因为这样一个条目就是
条目
。他们无法让它实现
Map
,因为
put
方法需要一个
集合
而不是
V
,所以为了解决这个问题,他们让它实现
Map
,这就剥夺了任何类型安全的机会。看起来你应该改用番石榴。