Список групп Java 8 lambdas на карте

Я хочу взять List<Pojo> и return Map<String, List<Pojo>> где ключ Map является String значением в Pojo, пусть называет его String key.

Чтобы уточнить, учитывая следующее:

Pojo 1: Ключ: значение: 1

Pojo 2: Key: значение: 2

Pojo 3: Ключ: b значение: 3

Pojo 4: Ключ: b значение: 4

Мне нужна Map<String, List<Pojo>> с keySet() размером 2, где ключ "a" имеет Pojos 1 и 2, а ключ "b" имеет pojos 3 и 4.

Как я могу достичь этого, используя Java 8 lambdas?

Ответ 1

Кажется, что простой вариант groupingBy - это то, что вам нужно:

Map<String, List<Pojo>> map = pojos.stream().collect(Collectors.groupingBy(Pojo::getKey));

Ответ 2

Кроме того, если вы хотите вернуть подобную карту, но вместо целого Pojo вы хотели, чтобы значения карты были некоторым свойством Pojo, вы бы сделали так:

Map<String, List<String>> map = pojos.stream()
            .collect(
                    Collectors.groupingBy(
                            Employee::getKey, Collectors.mapping(
                                    Pojo::getSomeStringProperty, Collectors.toList())));