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

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

如何根據多個屬性刪除 ArrayList 中的重復項

如何根據多個屬性刪除 ArrayList 中的重復項

阿波羅的戰車 2023-03-23 14:56:02
我想根據多個屬性從數組列表中刪除重復記錄。這是一個示例域對象類:private String mdl;private String ndc;private String gpi;private String labelName;private int seqNo;private String vendorName;mdl、ndc、gpi 和 seqNo 一起構成了唯一的記錄。我想在檢查這 4 個屬性的數組列表中查找重復項,然后如果列表中已存在具有相同 4 個屬性的記錄,則從列表中刪除該記錄。
查看完整描述

2 回答

?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

.equals()并且.hashCode()應該被覆蓋以說明您的密鑰:mdl,ndc。gpi, 序列號 在這個網站上有無數的指南可以做到這一點,但是像這樣:


@Override

public boolean equals(Object obj) {

    if(obj != null && obj instanceof MyClass) {

        MyClass o = (MyClass)obj;

        return mdl.equals(o.mdl) && ndc.equals(o.ndc) &&

          gpi.equals(o.gpi) && seqNo == o.seqNo;

    }

    return false;

}


@Override

public int hashCode() {

    return Objects.hash(mdl, ndc, gpi, seqNo);

}

如果這是一個問題,可能會有更有效的方法來實現它們。


然后你可以將你的列表轉換為一個集合:


Set<MyClass> set = new HashSet<>(list);

結果set不會有任何重復,list = new ArrayList<>(set);如果需要,您現在可以用新值替換您的列表。


如果要保持原始列表中項目的順序,請實例化LinkedHashSet而不是HashSet.


與您的直接問題無關,如果您想首先避免重復,也許可以考慮使用 aSet而不是。List這將使您的代碼更高效(沒有重復項的情況下內存使用量更少)并消除以后搜索重復項的需要。


查看完整回答
反對 回復 2023-03-23
?
料青山看我應如是

TA貢獻1772條經驗 獲得超8個贊

您可以嘗試執行以下操作;


List<Obj> list = ...; // list contains multiple objects

Collection<Obj> nonDuplicateCollection = list.stream()

        .collect(Collectors.toMap(Obj::generateUniqueKey, Function.identity(), (a, b) -> a))

        .values();

(a, b) -> a, 意味著當兩個對象相同時,最終映射將包含較早的對象,后一個將被丟棄,如果您想要后一個,可以更改此行為。


在哪里Obj;


public static class Obj {


    private String mdl;

    private String ndc;

    private String gpi;

    private String labelName;

    private int seqNo;

    private String vendorName;


    // other getter/setters


    public String generateUniqueKey() {

        return mdl + ndc + gpi + seqNo;

    }

}

我寧愿做這樣的事情,而不是重寫hashCode或equals方法,這在默認狀態下的另一個邏輯中可能是必需的......另外明確展示你如何使用適當的方法斷言唯一性比generateUniqueKey隱藏該邏輯更好某些hashCode方法在可讀性和可維護性方面要好得多。


查看完整回答
反對 回復 2023-03-23
  • 2 回答
  • 0 關注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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