Tengo Listde Employees con diferentes fechas de ingreso. Quiero obtener empleados antes y después de una fecha específica de unirse a la lista mediante transmisiones.
Intenté seguir el 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;
}
¿Hay alguna manera de hacer esto en una sola secuencia?

partitioningByRespuestas:
Puedes usar
partitioningBylo siguiente,PartitionBy Devuelve un recopilador que divide los elementos de entrada de acuerdo con un predicado y los organiza en un
Map<Boolean, List<T>>Tenga en cuenta que esto no manejará a los empleados con
specificDate.fuente
specificDateaterrizarán en lafalsepartición, donde está el código en cuestión en ningunospecificDate.plusDays(1)resolución resuelve el problema?specificDateaún estará en lafalseparte.truepartición ...Si su lista puede tener entradas que se unieron en el
specificDate, entonces puede resultarlegroupingByútil:El
resultmapa contieneEmployeeregistros agrupados por posición relativa aspecificDate, por lo que puede elegir quién se unió antes, después o en la fecha especificada.fuente
compareTosolo devolverá -1, 0 o 1. De hecho, LocalDate.compareTo puede devolver cualquier int.compareToy llamarloInteger.signum.Debe filtrar a los empleados con esta fecha en particular. Entonces puedes usar la partición:
Esto creará un mapa de colecciones en función de si cumplen el predicado.
fuente
partitioningByhoy.Puede usar
Collectors.groupingByy usar elcompareTométodo para agrupar la lista de empleados en función de la fecha anterior, actual y futuraEntonces la salida será
fuente