gpt4 book ai didi

java - 基于 Java 8 中的属性和谓词删除重复项

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:04:34 26 4
gpt4 key购买 nike

问题基于 https://stackoverflow.com/a/29671501/2517622

给定一个包含 id、name 和 IQ 的员工列表:

List<Employee> employee = Arrays.asList(new Employee(1, "John", 80), new Employee(1, "Bob", 120), Employee(1, "Roy", 60), new Employee(2, "Alice", 100));

我要输出:

[Employee{id=1, name='Bob', iq=120}, Employee{id=2, name='Alice', iq=100}]

因此,根据员工的 id 属性从列表中删除重复项,并出于显而易见的原因选择智商最高的员工。 :)

特别是,我有兴趣调整此解决方案,它仅根据 id 删除重复项:

    import static java.util.Comparator.comparingInt;
import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.toCollection;

...
List<Employee> unique = employee.stream()
.collect(collectingAndThen(toCollection(() -> new TreeSet<>(comparingInt(Employee::getId))),
ArrayList::new));

有办法吗?

最佳答案

这个怎么样,

Collection<Employee> distinctEmps = employee.stream()
.collect(Collectors.toMap(Employee::getId, Function.identity(),
(e1, e2) -> e1.getIq() >= e2.getIq() ? e1 : e2))
.values();

仅遵循@Holgers 方法的另一种变体是,

Collection<Employee> distinctEmps = employee.stream()
.collect(Collectors.toMap(Employee::getId, Function.identity(),
BinaryOperator.maxBy(Comparator.comparing(Employee::getIq))))
.values();

关于java - 基于 Java 8 中的属性和谓词删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55401241/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com