我有不同加入日期的List
的Employee
。我想在使用流从List加入特定日期之前和之后获取员工。
我尝试下面的代码,
List<Employee> employeeListAfter = employeeList.stream()
.filter(e -> e.joiningDate.isAfter(specificDate))
.collect(Collectors.toList());
List<Employee> employeeListBefore = employeeList.stream()
.filter(e -> e.joiningDate.isBefore(specificDate))
.collect(Collectors.toList());
class Employee{
int id;
String name;
LocalDate joiningDate;
}
有没有办法在单个流中执行此操作?
最佳答案
您可以按以下方式使用partitioningBy
,
Map<Boolean, List<Employee>> listMap = employeeList.stream()
.collect(Collectors.partitioningBy(e -> e.joiningDate.isAfter(specificDate)));
List<Employee> employeeListAfter = listMap.get(true);
List<Employee> employeeListBefore = listMap.get(false);
partitioningBy返回一个收集器,该收集器根据谓词对输入元素进行分区,并将其组织为
Map<Boolean, List<T>>
请注意,这不会使用
specificDate
处理员工。