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]}
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]}