как создать уникальную карту и создать список строк данного атрибута с потоком? - PullRequest
1 голос
/ 09 июля 2020

как я могу сгруппировать список в виде карты, где один атрибут является ключом к карте, а другой - списком строк?

Пример:

введите описание изображения здесь

Я бы хотел организовать это следующим образом.

КАРТА >

X, {A}

Y, {A}

Z, {A, B}

вместо того, чтобы указывать, как MAP >

примечание: не могли бы вы предложить дополнительные статьи о потоках с groupingBy, Function.Identify ()

Ответы [ 2 ]

2 голосов
/ 09 июля 2020

Вы можете использовать mapping в качестве нижележащего коллектора для сопоставления объектов с одним из их атрибутов -

Map<String, List<String>> groupedProducts = list.stream()
        .collect(Collectors.groupingBy(cartPromotion::getPromotion, 
                Collectors.mapping(cartPromotion::getProduct, Collectors.toList())));
0 голосов
/ 09 июля 2020

Это может быть полезно в соответствии с вашими требованиями:

Map<String, List<String>> promotors = cartPromotionList.stream()
                .collect(
                        Collectors.groupingBy(cart -> cart.getPromotion(),
                                Collectors.mapping(cart -> cart.getProduct(),
                                        Collectors.toList())));

        promotors
                .forEach((k, v) -> System.out.println(k + " : " + v.toString()));
    
...