J'ai List
de Employee
s avec des dates de jonction différentes. Je souhaite obtenir des employés avant et après la date spécifique d'inscription à partir de la liste à l'aide de flux.
j'ai essayé de suivre le code,
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;
}
Existe-t-il un moyen de le faire en un seul flux?
Vous pouvez utiliser Collectors.groupingBy
et utilisez la méthode compareTo
pour regrouper la liste des employés en fonction de la date précédente, actuelle et future
Map<Integer, List<Employee>> result = employeeList.stream()
.collect(Collectors.groupingBy(e-> e.joiningDate.compareTo(specificDate)< 0 ? -1 : (e.joiningDate.compareTo(specificDate) == 0 ? 0 : 1)));
Donc, la sortie sera
key--> -1 ---> will have employees with previous date
key--> 0 ---> will have employees with current date
key--> 1 ---> will have employees with future date