Java 8 Flujos de reducir duplicados quitan de mantenimiento de la entrada más reciente

Nestor Milyaev:

Tengo un bean Java, como

class EmployeeContract {
    Long id;
    Date date;
    getter/setter
}

Si una tiene una larga lista de estos, en el que tenemos duplicados por id pero con fecha diferente, como por ejemplo:

1, 2015/07/07
1, 2018/07/08
2, 2015/07/08
2, 2018/07/09

¿Cómo puedo reducir dicha lista manteniendo sólo las entradas con la fecha más reciente, tales como:

1, 2018/07/08
2, 2018/07/09

? utilizando preferentemente Java 8 ...

He empezado con algo como:

contract.stream()
         .collect(Collectors.groupingBy(EmployeeContract::getId, Collectors.mapping(EmployeeContract::getId, Collectors.toList())))
                    .entrySet().stream().findFirst();

Eso me da la asignación dentro de los grupos individuales, pero estoy atascado en cuanto a cómo recoger esto en una lista de resultados - mis arroyos no son demasiado fuertes me temo ...

Eugene:

Bueno, yo sólo voy a poner mi comentario aquí en la forma de una respuesta:

 yourList.stream()
         .collect(Collectors.toMap(
                  EmployeeContract::getId,
                  Function.identity(),
                  BinaryOperator.maxBy(Comparator.comparing(EmployeeContract::getDate)))
            )
         .values();

Esto le dará un Collectionlugar de una List, si realmente se preocupan por esto.

Supongo que te gusta

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