【发布时间】:2015-04-01 18:46:01
【问题描述】:
我有一个MultiValueMap<Integer, Path>,我试图从中获取 [print for this question] 使用相同的键放置在地图中的所有路径。
这是我目前的解决方案:
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();
}
我觉得我的解决方案很危险(施法和幻数 0)并且想避免它。 如何以更易读/更安全的方式实现预期结果?
【问题讨论】:
-
@SotiriosDelimanolis 错误:(35, 41) java: 不兼容的类型: java.lang.Object 无法转换为 java.util.List
-
未声明为
MultiValueMap<Integer, Path>是什么意思? decleration 显示在我的代码清单的第一行。 -
@SotiriosDelimanolis:我同意这是有道理的,但这不是 API 文档似乎支持的内容。
-
我发现了错误。它在程序的其他地方。
MultiValueMap<Integer, Path>被填充为LinkedLists,其中包含Paths 而不是Paths。我觉得很奇怪,它不能确保我尝试放入的任何内容都是Path。 -
@Pétur 这是因为他们莫名其妙地实现了
Map;他们无法实现Map<K, V>,因为这样一个条目将是Entry<K, V>。他们无法实现Map<K, Collection<V>>,因为put方法需要Collection<V>而不是V,所以为了解决这个问题,他们已经实现了Map<K, Object>,这消除了任何机会类型安全。看来您应该改用 Guava 版本。
标签: java apache-commons apache-commons-collection