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
,这就剥夺了任何类型安全的机会。看起来你应该改用番石榴。