第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

如何根據(jù)多個(gè)屬性刪除 ArrayList 中的重復(fù)項(xiàng)

如何根據(jù)多個(gè)屬性刪除 ArrayList 中的重復(fù)項(xiàng)

阿波羅的戰(zhàn)車 2023-03-23 14:56:02
我想根據(jù)多個(gè)屬性從數(shù)組列表中刪除重復(fù)記錄。這是一個(gè)示例域?qū)ο箢悾簆rivate String mdl;private String ndc;private String gpi;private String labelName;private int seqNo;private String vendorName;mdl、ndc、gpi 和 seqNo 一起構(gòu)成了唯一的記錄。我想在檢查這 4 個(gè)屬性的數(shù)組列表中查找重復(fù)項(xiàng),然后如果列表中已存在具有相同 4 個(gè)屬性的記錄,則從列表中刪除該記錄。
查看完整描述

2 回答

?
拉丁的傳說

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超8個(gè)贊

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


@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);

}

如果這是一個(gè)問題,可能會有更有效的方法來實(shí)現(xiàn)它們。


然后你可以將你的列表轉(zhuǎn)換為一個(gè)集合:


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

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


如果要保持原始列表中項(xiàng)目的順序,請實(shí)例化LinkedHashSet而不是HashSet.


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


查看完整回答
反對 回復(fù) 2023-03-23
?
料青山看我應(yīng)如是

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊

您可以嘗試執(zhí)行以下操作;


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, 意味著當(dāng)兩個(gè)對象相同時(shí),最終映射將包含較早的對象,后一個(gè)將被丟棄,如果您想要后一個(gè),可以更改此行為。


在哪里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方法,這在默認(rèn)狀態(tài)下的另一個(gè)邏輯中可能是必需的......另外明確展示你如何使用適當(dāng)?shù)姆椒〝嘌晕ㄒ恍员萭enerateUniqueKey隱藏該邏輯更好某些hashCode方法在可讀性和可維護(hù)性方面要好得多。


查看完整回答
反對 回復(fù) 2023-03-23
  • 2 回答
  • 0 關(guān)注
  • 108 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號