我有一个employees的列表。他们有isActive布尔字段。我想把employees分成两个列表:activeEmployees和formerEmployees。是否可以使用Stream?最复杂的方法是什么?
发布于 2017-10-26 15:26:01
在这种情况下,您还可以使用groupingBy,因为有2种组的可能性(活跃的和不活动的员工):
Map<Boolean, List<Employee>> grouped = employees.stream()
.collect(Collectors.groupingBy(Employee::isActive));
List<Employee> activeEmployees = grouped.get(true);
List<Employee> formerEmployees = grouped.get(false);发布于 2019-04-03 11:06:31
最复杂的方法是什么?
Java12当然有新的Collectors::teeing
List<List<Employee>> divided = employees.stream().collect(
Collectors.teeing(
Collectors.filtering(Employee::isActive, Collectors.toList()),
Collectors.filtering(Predicate.not(Employee::isActive), Collectors.toList()),
List::of
));
System.out.println(divided.get(0)); //active
System.out.println(divided.get(1)); //inactive发布于 2019-01-27 21:00:19
如果您愿意使用第三方库,这将使用来自Collectors2.partition的日食收藏。
PartitionMutableList<Employee> partition =
employees.stream().collect(
Collectors2.partition(Employee::isActive, PartitionFastList::new));
List<Employee> activeEmployees = partition.getSelected();
List<Employee> formerEmployees = partition.getRejected();您还可以使用ListIterate简化事情。
PartitionMutableList<Employee> partition =
ListIterate.partition(employees, Employee::isActive);
List<Employee> activeEmployees = partition.getSelected();
List<Employee> formerEmployees = partition.getRejected();PartitionMutableList是从PartitionIterable扩展而来的类型。PartitionIterable的每个子类型都有一个阳性结果getSelected()和阴性结果getRejected()的集合。
注意:我是Eclipse集合的提交者。
https://stackoverflow.com/questions/46958023
复制相似问题