亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從列表中刪除重復項?

如何從列表中刪除重復項?

一只名叫tom的貓 2019-08-05 15:14:38
如何從列表中刪除重復項?我想從列表中刪除重復項,但我正在做的是不起作用: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來執行重復檢查。


查看完整回答
反對 回復 2019-08-05
?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

假設您想要保留當前訂單并且不想要aSet,也許最簡單的是:

List<Customer> depdupeCustomers =
    new ArrayList<>(new LinkedHashSet<>(customers));

如果要更改原始列表:

Set<Customer> depdupeCustomers = new LinkedHashSet<>(customers);customers.clear();customers.addAll(dedupeCustomers);


查看完整回答
反對 回復 2019-08-05
?
慕哥6287543

TA貢獻1831條經驗 獲得超10個贊

java 8更新
你可以使用數組流如下:

Arrays.stream(yourArray).distinct()
                    .collect(Collectors.toList());


查看完整回答
反對 回復 2019-08-05
  • 3 回答
  • 0 關注
  • 413 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號