如何从列表中删除重复项?

如何从列表中删除重复项?

我想从列表中删除重复项,但我正在做的是不起作用:

List<Customer> listCustomer = new ArrayList<Customer>();    for (Customer customer: tmpListCustomer){
  if (!listCustomer.contains(customer)) 
  {
    listCustomer.add(customer);
  }
 }


一只名叫tom的猫
浏览 399回答 3
3回答

犯罪嫌疑人X

如果该代码不起作用,您可能没有适当地equals(Object)在Customer类上实现。据推测,有一些关键(我们称之为customerId)可以唯一地识别客户;&nbsp;例如class&nbsp;Customer&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;customerId; &nbsp;&nbsp;&nbsp;&nbsp;...适当的定义equals(Object)将如下所示:&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;boolean&nbsp;equals(Object&nbsp;obj)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(obj&nbsp;==&nbsp;this)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!(obj&nbsp;instanceof&nbsp;Customer))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Customer&nbsp;other&nbsp;=&nbsp;(Customer)&nbsp;obj; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.customerId.equals(other.customerId); &nbsp;&nbsp;&nbsp;&nbsp;}为了完整性,您还应该实现,hashCode以便两个Customer相等的对象将返回相同的哈希值。hashCode上述定义的匹配equals将是:&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;hashCode()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;customerId.hashCode(); &nbsp;&nbsp;&nbsp;&nbsp;}值得注意的是,如果列表很大,这不是删除重复项的有效方法。(对于包含N个客户的列表,您将需要N*(N-1)/2在最坏的情况下执行比较;即,当没有重复时。)对于更有效的解决方案,您应该使用类似的东西HashSet来执行重复检查。

翻过高山走不出你

假设您想要保留当前订单并且不想要aSet,也许最简单的是:List<Customer>&nbsp;depdupeCustomers&nbsp;= &nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;ArrayList<>(new&nbsp;LinkedHashSet<>(customers));如果要更改原始列表:Set<Customer>&nbsp;depdupeCustomers&nbsp;=&nbsp;new&nbsp;LinkedHashSet<>(customers);customers.clear();customers.addAll(dedupeCustomers);

慕哥6287543

java 8更新你可以使用数组流如下:Arrays.stream(yourArray).distinct() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.toList());
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java