3

同じキーを使用してマップに配置されたすべてのパスを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)、避けたいと思っています。より読みやすく安全な方法で目的の結果を得るにはどうすればよいですか?

4

1 に答える 1

4

エントリ セットは、残念な署名で宣言されているようです。ただし、代わりにキーを反復処理して、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>値として a があります...)

于 2015-04-01T18:57:45.437 に答える