如何從列表中刪除重復項?我想從列表中刪除重復項,但我正在做的是不起作用: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
提交
取消