参加日が異なるList
/Employee
sを持っています。ストリームを使用してリストから参加する特定の日付の前後に従業員を取得したい。
私は次のコードを試しました、
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;
}
これを単一のストリームで行う方法はありますか?
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