如何检查列表是否包含重复项目

时间:2018-04-12 20:15:52

标签: java arrays java-8

例如,考虑下面的列表:

List<MyCustomObject> list = Arrays.asList(new MyObject(1, "one")...);

我想知道如何检查列表是否包含重复的项目,考虑构造函数上的第二个参数是String。

2 个答案:

答案 0 :(得分:1)

首先,您需要为MyObject实现hashcode和equals。然后有多种方法来检查是否存在重复项 -

  1. 使用@AndyTurner在评论中建议的内容。
  2. 使用 - list.size() == list.stream().distinct().count()
  3. 使用 - list.stream().allMatch(new HashSet<>()::add)
  4. 您可以在性能方面检查哪一个比其他更好。

答案 1 :(得分:0)

重复检查在很大程度上取决于对象的属性。如果正在对对象执行检查,则必须考虑该对象的哪些部分是唯一的并比较这些值。然而,这种方法有一些缺点,如果对象可能具有相同的值,那么这种方法就变得更加困难。

从过去的项目经验来看,ID标签是最容易实现的重复检测形式之一。初始化对象时,请指定唯一的ID值,以便只能在重复检查中检查ID。

排序对象的数据结构使得过程变得更容易,因为您知道对象应该在哪里(如果存在)。