/** * @author lautturi.com * Java example: group by multiple field names in java */ import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; class Person{ String name; int age; public Person(String string, int i) { name = string; age = i; } public String getName() { return name; } public int getAge() { return age; } } public class Lautturi { public static void main(String[] args){ Stream<Person> persons = Stream.of( new Person("Alan",13), new Person("Bob",25), new Person("James",22), new Person("Tom",22), new Person("Alan",23), new Person("Bob",27) ); Map<String, Map<Integer, List<Person>>> map = persons.collect(Collectors.groupingBy(Person::getName, Collectors.groupingBy(Person::getAge))); System.out.println(map.get("Tom").get(22)); System.out.println(map.get("Alan")); System.out.println(map.get("Alan").get(23)); } }
output:
[hello.Person@87aac27] {23=[hello.Person@3e3abc88], 13=[hello.Person@6ce253f1]} [hello.Person@3e3abc88]