web-dev-qa-db-fra.com

Obtenez des employés avant et après la date spécifique de l'adhésion à partir de la liste des employés avec Java stream

J'ai List de Employees 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?

9
Rajiv

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
2
Deadpool