groupingBy classifier supplier collector
Data
List<Employee> employees = List.of(
new Employee(1, "Alex", 30, new Department(1, "HR")),
new Employee(2, "Alex", 36, new Department(1, "HR")),
new Employee(3, "David", 30, new Department(1, "HR")),
new Employee(4, "Andrew", 30, new Department(2, "Finance")),
new Employee(5, "Edward", 31, new Department(2, "Finance")),
new Employee(6, "Nathan",42, new Department(3, "ADMIN")),
new Employee(7, "Frank",23 , new Department(3, "ADMIN")),
new Employee(8, "David", 30, new Department(1, "HR")));
Syntax:
groupingBy(Function<? super T,? extends K> classifier, Supplier<M> mapFactory, Collector<? super T,A,D> downstream)
Examples
groupingWithFiltering()
// Filtering all persons with salary less than 300
public void groupingWithFiltering() {
Map<Rec.Department, Long> map = persons.stream()
.collect(groupingBy(Rec.Person::department, filtering(p -> p.salary() > 300d, counting())));
System.out.println(map);
}