从 MultiValueMap 获取具有相同键的所有对象
Getting all objects with same key from a MultiValueMap
我有一个 MultiValueMap<Integer, Path>
,我正试图从中获取 [出于这个问题的目的打印 ] 出地图中使用的所有路径相同的密钥。
这是我目前的解决方案:
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)并且想避免它。
我怎样才能以更 readable/safe 的方式达到预期的结果?
条目集似乎是用一个不幸的签名声明的。但是您可以改为遍历键,并为每个键调用 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();
}
(请注意,Guava 的 Multimap
将允许您改用 duplicates.asMap().entrySet()
,并且每个条目都会有一个 Collection<V>
作为值...)
我有一个 MultiValueMap<Integer, Path>
,我正试图从中获取 [出于这个问题的目的打印 ] 出地图中使用的所有路径相同的密钥。
这是我目前的解决方案:
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)并且想避免它。 我怎样才能以更 readable/safe 的方式达到预期的结果?
条目集似乎是用一个不幸的签名声明的。但是您可以改为遍历键,并为每个键调用 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();
}
(请注意,Guava 的 Multimap
将允许您改用 duplicates.asMap().entrySet()
,并且每个条目都会有一个 Collection<V>
作为值...)