Получение всех объектов с одинаковым ключом из 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) и хотел бы избежать этого. Как я могу достичь желаемого результата более читабельным / безопасным способом?

1 ответ

Решение

Набор записей, кажется, объявлен с неудачной подписью. Но вместо этого вы можете перебирать ключи и вызывать 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();
}

(Обратите внимание, что гуава Multimap позволит вам использовать duplicates.asMap().entrySet() вместо этого, и каждая запись будет иметь Collection<V> как ценность...)

Другие вопросы по тегам