Eliminar duplicados de la lista <Objeto> basado en la condición

LeeWay:

Punto de partida:

public class Employee {
    private String id;
    private String name;
    private String age;
}

Tengo una lista de los empleados: List<Employee> employee;

ejemplos de los empleados de la lista:

{id="1", name="John", age=10}
{id="2", name="Ana", age=12}
{id="3", name="John", age=23}
{id="4", name="John", age=14}

Asumamos que agees único.

¿Cómo puedo eliminar todos los duplicados de la lista basada en la namepropiedad y tener en la salida de la entrada con el más grande age?

La salida debe ser similar a:

{id="2", name="Ana", age=12}
{id="3", name="John", age=23}

La forma en que probé :

HashSet<Object> temp = new HashSet<>();
employee.removeIf(e->!temp.add(e.getName()));

..pero esta manera el primer partido se mantuvo en employee

{id="1", name="John", age=10}
{id="2", name="Ana", age=12}

... y no tengo ni idea de cómo poner otra condición para mantener el uno con el más grande age.

ernest_k:

Aquí está una manera que agrupa elementos por namey reduce los grupos seleccionando el uno con un máximo de age:

List<Employee> uniqueEmployees = employees.stream()
            .collect(Collectors.groupingBy(Employee::getName,
                    Collectors.maxBy(Comparator.comparing(Employee::getAge))))
        .values()
        .stream()
        .map(Optional::get)
        .collect(Collectors.toList());

Que vuelve [[id=2, name=Ana, age=12], [id=3, name=John, age=23]]con sus datos de prueba.

Supongo que te gusta

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