如何从列表中删除重复项?我想从列表中删除重复项,但我正在做的是不起作用:List<Customer> listCustomer = new ArrayList<Customer>(); for (Customer customer: tmpListCustomer){
if (!listCustomer.contains(customer))
{
listCustomer.add(customer);
}
}
3 回答
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
如果该代码不起作用,您可能没有适当地equals(Object)
在Customer
类上实现。
据推测,有一些关键(我们称之为customerId
)可以唯一地识别客户; 例如
class Customer { private String customerId; ...
适当的定义equals(Object)
将如下所示:
public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof Customer)) { return false; } Customer other = (Customer) obj; return this.customerId.equals(other.customerId); }
为了完整性,您还应该实现,hashCode
以便两个Customer
相等的对象将返回相同的哈希值。hashCode
上述定义的匹配equals
将是:
public int hashCode() { return customerId.hashCode(); }
值得注意的是,如果列表很大,这不是删除重复项的有效方法。(对于包含N个客户的列表,您将需要N*(N-1)/2
在最坏的情况下执行比较;即,当没有重复时。)对于更有效的解决方案,您应该使用类似的东西HashSet
来执行重复检查。
翻过高山走不出你
TA贡献1875条经验 获得超3个赞
假设您想要保留当前订单并且不想要aSet
,也许最简单的是:
List<Customer> depdupeCustomers = new ArrayList<>(new LinkedHashSet<>(customers));
如果要更改原始列表:
Set<Customer> depdupeCustomers = new LinkedHashSet<>(customers);customers.clear();customers.addAll(dedupeCustomers);
慕哥6287543
TA贡献1831条经验 获得超10个赞
java 8更新
你可以使用数组流如下:
Arrays.stream(yourArray).distinct() .collect(Collectors.toList());
添加回答
举报
0/150
提交
取消