当前位置: 首页 > 知识库问答 >
问题:

Java8中基于属性和谓词的重复项删除

督灿
2023-03-14

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

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}]
    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));

有办法吗?

共有1个答案

龙高歌
2023-03-14

这样怎么样,

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();
 类似资料:
  • 我正试图从基于某些属性的对象列表中删除重复项。 我们能用一种简单的方法使用Java8吗 我们是否可以根据员工的属性删除其中的重复项。我看到过从String的arraylist中删除重复字符串的帖子。

  • 我有一个这样定义的类: 现在我有一个项目对象列表,现在我想找到所有项目的总价。在Java8中我们如何做到这一点? 如果列表是简单的整数,那么我们在这里给出了解决方案--如何用java流求和整数列表?

  • 名单中有重名的;对于这些,只想保留最后一个。 例如。如果列表有三个项目,并且第一个和第三个项目都有值为“abc”的“name”,那么结果列表应该只包含来自原始列表的第二个和第三个项目。

  • 我想创建另一个数组,在其中添加重复的活动值 预期产出:

  • 我下面有一个类,想删除包含同名的重复人,如何使用Java8 Lambda,预计列表包含下面的p1、p3。

  • 问题内容: 我使用以下方式列出了重复项: 现在,如何删除除一条消息以外的所有消息(我正在尝试删除重复项,以便可以在上应用唯一索引)。 问题答案: 使用和分配行号,以便删除重复对中除一个以外的所有行。