Collectors.partitioningBy:
Map<Boolean, List<Employee>> partitioned =
listOfEmployees.stream().collect(
Collectors.partitioningBy(Employee::isActive));
The resulting map contains two lists corresponding to whether the predicate was matched:
List<Employee> activeEmployees = partitioned.get(true);
List<Employee> formerEmployees = partitioned.get(false);
There are several reasons to use partitioningByinstead groupingBy(as suggested by Juan Carlos Mendoza ):
-, groupingBy Function<Employee, Boolean> ( ), , , , 3- , . partitioningBy Predicate<Employee>, 2 ., , NullPointerException : , , - Map.computeIfAbsent, " , ", , . ( lczapski ).
-, (*) partitioningBy; groupingBy /, :
System.out.println(
Stream.empty().collect(Collectors.partitioningBy(a -> false)));
System.out.println(
Stream.empty().collect(Collectors.groupingBy(a -> false)));
(*) Java 8 Javadoc, Java 9.