Как сгладить список внутри карты в Java 8 - PullRequest
5 голосов
/ 04 апреля 2019

Как перейти от карты целых чисел к спискам строк, таких как:

<1, ["a", "b"]>,
<2, ["a", "b"]>

, к сведенному списку строк, таких как:

["1-a", "1-b", "2-a", "2-b"]

в Java 8 ?

Ответы [ 2 ]

3 голосов
/ 04 апреля 2019

Вы можете использовать flatMap для значений как:

map.values()
   .stream()
   .flatMap(List::stream)
   .collect(Collectors.toList());

Или, если вы хотите использовать записи на карте, вы можете использовать код, указанный Хольгером:

map.entries()
   .stream()
   .flatMap(e -> e.getValue().stream().map(s -> e.getKey() + s))
   .collect(Collectors.toList());
1 голос
/ 04 апреля 2019

Вы можете просто использовать это:

List<String> result = map.entrySet().stream()
        .flatMap(entry -> entry.getValue().stream().map(string -> entry.getKey() + "-" + string))
        .collect(Collectors.toList());

Это перебирает все записи на карте, объединяет все значения с их ключом и собирает его в новый список.

Результат будет:

[1-a, 1-b, 2-a, 2-b]
...