Stream Groupby Set of Entities



public static void main(String[] args) {
        List<Item> items = Arrays.asList(
                new Item("apple", 17),
                new Item("banana", 19),
                new Item("orange", 11),
                new Item("watermelon", 7),
                new Item("papaya", 7),
                new Item("apple", 19),
                new Item("banana", 11),
                new Item("apple", 17)
                );
       
        Map<Integer,List<Item>> groupItems = items.stream().collect(Collectors.groupingBy(Item::getQuantity));
        System.out.println(groupItems);
       
        Map<Integer, Set<String>> quantity = items.stream().collect(
                            Collectors.groupingBy(
                                   Item::getQuantity,
                                  Collectors.mapping(Item::getName, Collectors.toSet())
                              ));
        System.out.println(quantity);
    }


Output
{17=[Item [name=apple, quantity=17], Item [name=apple, quantity=17]], 19=[Item [name=banana, quantity=19], Item [name=apple, quantity=19]], 7=[Item [name=watermelon, quantity=7], Item [name=papaya, quantity=7]], 11=[Item [name=orange, quantity=11], Item [name=banana, quantity=11]]}

{17=[apple], 19=[banana, apple], 7=[papaya, watermelon], 11=[orange, banana]}