Конвертировать Guava ListMultimap в Java Карта - PullRequest
0 голосов
/ 14 апреля 2020

Гуава MultiMap имеет реализации ImmutableListMultimap и ImmutableSetMultimap. Учитывая, что я создал экземпляр ImmutableListMultimap<String, Anything>, как я могу преобразовать его в java.util.Map<String, List<Anything>>?

Метод asMap() возвращает java.util.Map<String, Collection<Anything>>, но его нельзя привести к java.util.Map<String, List<Anything>>.

Лучшее, что у меня сейчас есть, это

 final Map<String, Collection<Anything>> listMultimap = multimap.asMap();
 // convert to Map<String, List<>>
 final Map<String, List<Anything>> listMap = listMultimap.entrySet().stream()
     .collect(Collectors.toMap(
                  Map.Entry::getKey, 
                  e -> (List<Anything>) e.getValue()));

, но это не выглядит идеальным. Учитывая, что переменная экземпляра имеет тип ListMultimap, разве не должно быть удобного метода для ее представления в виде Map<..., List>?

Apache commons-collection ArrayListValuedHashMap, имеющего ту же проблему.

1 Ответ

3 голосов
/ 14 апреля 2020

ListMultimap.asMap() упоминание документов

Примечание. Значения возвращаемой карты гарантированно имеют тип List. Чтобы получить эту карту с более конкретным c generi c типом Map<K, List<V>>, вместо этого вызовите Multimaps.asMap(ListMultimap).

Так что просто используйте один из вспомогательных методов stati c для это в Multimaps, который:

Возвращает multimap.asMap() с его типом, исправленным с Map<K, Collection<V>> до Map<K, List<V>>.

...