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 Collection
lugar de una List
, si realmente se preocupan por esto.