

Java 9 stream enhancement with Collectors.filtering method with a stream. Its basic requirements while Grouping with filtering. Let see one example with Java 8 so we can get more advantages of Collectors.filtering advantages. Here is an example of Java 9 Collectors Filtering Example.
Table of Contents
Java 8: GroupingBy + Filter
Here is some limitation if salary less than 1000 than those key and value both will be removed so in
java.util.Map<String, Long> employeeGroup = employeeList.stream() .filter(employee -> employee.getSalary()>1_000) // it will filter Sr. Developer because there are no record in greater than 1000 .collect(Collectors.groupingBy(Employee::getDesignation,Collectors.counting())); employeeGroup.forEach((k, v) -> { System.out.println(k + "-" + v); });
Output:
Developer-1 CEO-1
Java 9 : GroupingBy + Collectors.filtering
Collectors.filtering will not consider value but it will consider key with 0 counts, If a value contains List than it will contain Empty List if predicate will not be satisfied consider. Means that Collectors.filtering will return group by key with 0 or empty data value if the filter will discard record that grouped value.
java.util.Map<String, Long> employeeGroup = employeeList.stream() .collect(Collectors.groupingBy(Employee::getDesignation, Collectors.filtering(e -> { return e.getSalary() > 1_000; // it will collect Sr. Developer with 0 count }, Collectors.counting())));
Output:
Sr. Developer-0 Developer-1 CEO-1
Was this post helpful?
Let us know if you liked the post. That’s the only way we can improve.