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 partitioningBy
instead 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.