例如,考虑下面的列表:
List<MyCustomObject> list = Arrays.asList(new MyObject(1, "one")...);
我想知道如何检查列表是否包含重复的项目,考虑构造函数上的第二个参数是String。
答案 0 :(得分:1)
首先,您需要为MyObject实现hashcode和equals。然后有多种方法来检查是否存在重复项 -
list.size() == list.stream().distinct().count()
list.stream().allMatch(new HashSet<>()::add)
您可以在性能方面检查哪一个比其他更好。
答案 1 :(得分:0)
重复检查在很大程度上取决于对象的属性。如果正在对对象执行检查,则必须考虑该对象的哪些部分是唯一的并比较这些值。然而,这种方法有一些缺点,如果对象可能具有相同的值,那么这种方法就变得更加困难。
从过去的项目经验来看,ID标签是最容易实现的重复检测形式之一。初始化对象时,请指定唯一的ID值,以便只能在重复检查中检查ID。
排序对象的数据结构使得过程变得更容易,因为您知道对象应该在哪里(如果存在)。