Есть ли способ извлечь значения карты? - PullRequest
1 голос
/ 22 апреля 2020

Я пытаюсь извлечь значения из приведенного ниже типа данных. Map<String, Map<String, Integer>>, Пример данных подобен этому.

  1. ("aaa", Карта ("bbb", 333) )
  2. ("ddd ", Карта (" ccc ", 444) )

Результат, который я хочу

HashMap 
key : bbb, value : 333 
key : ccc, value : 444

Я пытался

mapData.values().stream()
       .collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue))

но потерпел неудачу. Есть ли какой-нибудь хороший способ извлечь часть значений в виде Map во вложенном Map?

Ответы [ 2 ]

4 голосов
/ 22 апреля 2020

Вам необходимо flatMap ваши записи внутренней карты -

Map<String, Integer> output = map.values().stream()
        .flatMap(m -> m.entrySet().stream())
        .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
1 голос
/ 22 апреля 2020

Простой способ:

Map<String,Integer> map = new HashMap<>();
mapData.values().forEach(map::putAll);

или

mapData.values().stream().collect(HashMap::new, HashMap::putAll,Map::putAll);
...