The groupingBy() function belongs to the Collectors class from java.util.stream package. It groups the elements based on a specified property, into a Stream. It is equivalent to the groupBy() operation in SQL.
Syntax
public static <T, K> Collector<T, ?, Map<K, List<T>>>
groupingBy(Function<? super T, ? extends K> classifier)
Java Stream groupingBy() operation – examples
Example 1:
A program that will take a list of strings and group them by the length attribute:
class Test {
public static void main(String[] args) {
List<String> cities = new ArrayList<>(Arrays.asList("Paris", "Bern", "London", "Tokyo", "Boston"));
Map<Integer, List<String>> resultMap = cities.stream()
.collect(Collectors.groupingBy(String::length));
System.out.println(resultMap);
}
}
Output: {4=[Bern], 5=[Paris, Tokyo], 6=[London, Boston]}
Example 2:
Let’s write a program that will take a list of Users and group them by the membership type:
class Test {
public static void main(String[] args) {
Map<String, List<User>> resultMap = getAllUsers().stream()
.collect(Collectors.groupingBy(User::getMembershipType));
System.out.println(resultMap);
}
private static List<User> getAllUsers() {
List<User> users = new ArrayList<>();
users.add(new User("John", "john123", "premium", "5th Avenue"));
users.add(new User("Megan", "meganusr", "gold", "New Light Street"));
users.add(new User("Steve", "steve1234", "regular", "New Street Avenue"));
users.add(new User("Melissa", "mell1", "premium", "Ser Kingston Street"));
users.add(new User("Joan", "joan1234", "gold", "New Light Street"));
return users;
}
}
class User {
private String name;
private String username;
private String membershipType;
private String address;
public User(String name, String username, String membershipType, String address) {
this.name = name;
this.username = username;
this.membershipType = membershipType;
this.address = address;
}
public String getMembershipType() {
return membershipType;
}
@Override
public String toString() {
return "name: " + name + " ," + "username: " + username;
}
}
Output:
{
gold=[name: Megan ,username: meganusr, name: Joan ,username: joan1234],
premium=[name: John ,username: john123, name: Melissa ,username: mell1],
regular=[name: Steve ,username: steve1234]
}
I hope this tutorial was helpful to you. To learn more, check out other Java Functional Programming tutorials.