从java中的数组列表中获取唯一对象的列表

ash*_*ley 1 java java-stream

我有一份员工名单如下:

[Employee{id="1", NID="A123", wages=5000},
 Employee{id="2", NID="B123", wages=1000},
 Employee{id="3", NID="C123", wages=2000},
 Employee{id="4", NID="C123", wages=3000}]
Run Code Online (Sandbox Code Playgroud)

我需要能够仅检索唯一的对象,并且在 NID 相同的情况下,我需要检索具有最大 Id 的对象。所以最终的列表应该是这样的

[Employee{id="1", NID="A123", wages=5000},
 Employee{id="2", NID="B123", wages=1000},
 Employee{id="4", NID="C123", wages=3000}]
Run Code Online (Sandbox Code Playgroud)

我知道可以使用嵌套 for 循环来完成此操作,但我想使用 Java 流来完成此操作。我可以通过使用 group by 找到列表中重复的员工,但我仍然不知道如何像上面那样获取列表。

 Map<String, List<Employee>> groupByNid = employeeList.stream().collect(Collectors.groupingBy(Employee::getNID));
Run Code Online (Sandbox Code Playgroud)

谢谢帮忙。

阿什利

Tom*_*ski 5

我提出以下建议:

    Collection<Employee> filteredEmployees = employeeList.stream()
            .collect(Collectors.toMap(
                    Employee::getNID, Function.identity(),
                    BinaryOperator.maxBy(Comparator.comparing(Employee::getID))
            )).values();
Run Code Online (Sandbox Code Playgroud)