Tengo una lista de objetos personalizados:
List<CustomObject> customObjects;
de la que me gustaría extraer todos los objetos que tienen el más antiguo de fecha y hora tienen el valor establecido.
Así que la clase sería algo como esto:
class CustomObject {
LocalDateTime date;
public LocalDateTime getDateTime() {
return date;
}
}
y soy capaz de encontrar con éxito el objeto en la lista con la fecha más temprana con una función de comparación personalizada de esta manera:
private static LocalDateTime getDate(CustomObject customObject) {
return customObject.getDateTime();
}
CustomObject customObjectMin = customObjects.stream().
min(Comparator.comparing(MyUtilClass::getDate));
Sin embargo, es posible tener varios objetos personalizados con la misma fecha, pero parece que no hay manera de conseguir múltiples ocurrencias en ese escenario con el min
. ¿Hay una solución fácil de encontrar todos los objetos en la lista con el conjunto fecha más temprana? Algo como esto:
List<CustomObject> customObjectsMin = customObjects.stream().
minWithAllOccurences(Comparator.comparing(MyUtilClass::getDate));
Puede hacer dos selecciones.
- uno encontrar la fecha min
- uno encontrar aquellos con esa fecha
por ejemplo,
LocalDate min = customObjects.stream()
.map(CustomObject::getDateTime)
.min(Comparator.naturalOrder());
List<CustomObject> objs = customObjects.stream()
.filter(c -> min.equals(c.getDateTime()))
.collect(Collectors.toList());
O puede utilizar Collectors.groupingBy en un TreeMap y tomar la primera entrada.