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

JAVA:如何使用stream[duplicate]从列表中删除重复项

叶智
2023-03-14

我要根据列表中项目的属性(邮件)从列表中删除重复项。
我执行了以下操作:

acteurs = acteurs.stream().distinct().collect(Collectors.toList());
@Override
public boolean equals(Object o) {
    if (this.getMail().equals(((Acteur)o).getMail())) {
        return true;
    }
    if (this == o) {
        return true;
    }
    if (o == null || getClass() != o.getClass()) {
        return false;
    }
    Acteur acteur = (Acteur) o;
    if(acteur.id == null || id == null) {
        return false;
    }
    return Objects.equals(id, acteur.id);
}
acteurs = acteurs.stream().distinct().collect(Collectors.toList());
List<Acteur> dto3s =acteurs.stream()
            .collect(Collectors.collectingAndThen(
                Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Acteur:: getMail))),
                ArrayList::new));

共有1个答案

潘灵均
2023-03-14

您破坏了equals/hashcode协定。

您需要根据需求实现hashcode

 类似资料:
  • 其中DataCord是一个类 并且调谐器应该是唯一的

  • 问题内容: 我想从列表中删除重复项,但我无法正常工作: 问题答案: 如果该代码不起作用,则可能是你未在该类上正确实现。 大概有一些钥匙(我们称之为)可以唯一地标识一个客户。例如 的适当定义equals(Object)如下所示: 为了完整起见,你还应该实现hashCode两个Customer相等的对象将返回相同的哈希值。hashCode上述定义的匹配项为equals: 还值得注意的是,如果列表很大,

  • 问题内容: 我将如何使用python检查列表并删除所有重复项?我不需要指定重复项是什么- 我希望代码找出是否存在重复项,如果有则将其删除,每个重复项仅保留一个实例。如果列表中有多个重复项,它也必须起作用。 例如,在下面的代码中,列表lseparatedOrbList有12个项目-一项被重复六次,一项被重复五次,并且只有一个实例。我希望它更改列表,因此只有三项-每一项,并且它们之前出现的顺序相同。我

  • 问题内容: 我在Python中有一个列表列表: 我想从中删除重复的元素。如果这是正常列表,而不是我可以使用的列表set。但不幸的是,该列表不可散列,因此无法建立一组列表。只有元组。因此,我可以将所有列表转换为元组,然后使用set并返回列表。但这不是很快。 如何以最有效的方式做到这一点? 上面的结果应为: 我不在乎保留订单。 注意:这个问题很相似,但不是我所需要的。搜索了SO,但没有找到确切的重复项

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

  • 问题内容: 我们如何借助 Guava api 从列表中删除重复项? 目前,我正在关注: 问题答案: 可能最有效的方法是,它消除重复并保留迭代顺序。 (但是您的实现几乎是一样高效,并且不会抛出空值,在极少数情况下,您实际上希望在集合中使用空值。)