我有不同加入日期的ListEmployee。我想在使用流从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处理员工。

07-24 20:15