web-dev-qa-db-ja.com

Java streamを使用して、従業員のリストから参加する特定の日付の前後の従業員を取得します

参加日が異なるList/Employeesを持っています。ストリームを使用してリストから参加する特定の日付の前後に従業員を取得したい。

私は次のコードを試しました、

 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;
}

これを単一のストリームで行う方法はありますか?

9
Rajiv

Collectors.groupingByを使用し、compareToメソッドを使用して、過去、現在、未来の日付に基づいて従業員リストをグループ化できます。

Map<Integer, List<Employee>> result = employeeList.stream()
            .collect(Collectors.groupingBy(e-> e.joiningDate.compareTo(specificDate)< 0 ? -1 : (e.joiningDate.compareTo(specificDate) == 0 ? 0 : 1)));

したがって、出力は

key--> -1 ---> will have employees with previous date
key--> 0 ---> will have employees with current date
key--> 1 ---> will have employees with future date
2
Deadpool