Recuperando múltiples ocurrencias min de una lista

zed:

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));
Peter Lawrey:

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.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=210155&siteId=1
Recomendado
Clasificación