Java Stream:多个分组

Mar*_*rvy 2 java lambda java-stream

我可以按一个字段分组,但我想按两个字段分组

//persons grouped by gender
Map<String, Long> personsGroupedByGender = persons.stream().collect(Collectors.groupingBy(Person::getGender, Collectors.counting()));

//persons grouped by age
Map<Int, Long> personsGroupedByAge = persons.stream().collect(Collectors.groupingBy(Person::getAge, Collectors.counting()));

//persons grouped by gender and age 

    ???
Run Code Online (Sandbox Code Playgroud)

Eug*_*ene 7

您可以分组两次,结果将是您所期望的,但包装方式略有不同。

persons.stream().collect(Collectors.groupingBy(Person::getGender,  
              Collectors.groupingBy(Person::getAge, Collectors.counting())));
Run Code Online (Sandbox Code Playgroud)