Tenho List
de Employee
s com diferentes datas de união. Desejo obter funcionários antes e depois da data específica de ingresso na lista usando fluxos.
eu tentei seguir o código,
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 alguma maneira de fazer isso no fluxo único?
partitioningBy
Respostas:
Você pode usar
partitioningBy
como abaixo,partitioningBy Retorna um coletor que particiona os elementos de entrada de acordo com um predicado e os organiza em um
Map<Boolean, List<T>>
Observe que isso não vai lidar com funcionários
specificDate
.fonte
specificDate
aterrissarão nafalse
partição, o que ocorre no código em questãospecificDate.plusDays(1)
resolve o problema?specificDate
ainda estará nafalse
parte.true
partição ...Se sua lista puder ter entradas que se juntaram ao
specificDate
, você poderá achargroupingBy
útil:O
result
mapa contémEmployee
registros agrupados por posição relativamente aspecificDate
, para que você possa escolher quem ingressou antes, depois ou na data especificada.fonte
compareTo
retornará apenas -1, 0 ou 1. De fato, LocalDate.compareTo pode retornar qualquer int.compareTo
e acessáInteger.signum
-lo.Você precisa filtrar os funcionários com essa data específica. Então você pode usar o particionamento:
Isso criará um mapa de coleções com base em se elas cumprem o predicado.
fonte
partitioningBy
hoje.Você pode usar
Collectors.groupingBy
e usar ocompareTo
método para agrupar a lista de funcionários com base nas datas anterior, atual e futuraEntão a saída será
fonte