Как преобразовать список в карту с установленным значением в Java 8 - PullRequest
0 голосов
/ 07 ноября 2018
List<Hosting> list = new ArrayList<>();
list.add(new Hosting(1, "liquidweb.com"));
list.add(new Hosting(2, "aws.amazon.com"));
list.add(new Hosting(3, "digitalocean.com"));
list.add(new Hosting(2, "aws.amazon.com"));

Я хочу преобразовать приведенный выше список в Map<Integer, Set<String>>

1 -> {"liquidweb.com"}
2 -> {"aws.amazon.com"}
3 -> {"digitalocean.com"}

Как я могу сделать преобразование в Java 8?

1 Ответ

0 голосов
/ 07 ноября 2018

Использование toMap:

Map<Integer, Set<String>> result = list.stream()
                .collect(toMap(Hosting::getId,
                        e -> new HashSet<>(Collections.singleton(e.getValue())),
                        (l, r) -> {l.addAll(r); return l;}));

или

Использование groupingBy с mapping в качестве нисходящего коллектора:

Map<Integer, Set<String>> resultSet = list.stream()
          .collect(groupingBy(Hosting::getId, 
                       mapping(Hosting::getValue, toSet())));

Лично я предпочитаю последнее, так как оно более читабельно.

...