簡體   English   中英

如何基於Java中對象的一個​​成員變量從數組列表中刪除另一個數組列表中存在的對象?

[英]How do I remove objects from an arraylist which are present in another arraylist based on one member variable of the object in Java?

我有一個具有以下結構的POJO類A

class A{
private String var1;
private int var2;
private String var3;
}

我有兩個具有不同大小的ArrayList<A> List1List2 我想刪除List1中已經存在於List2中的所有元素,並且需要針對存儲在var2的值檢查這種相等性。

我已經檢查過將List Hashset並使用removeAll() 但這不會提供所需的輸出,因為對於相同的var2var1值不同。

請幫我解決這個問題。

編輯1-穆拉特要求

public class HistoryDto implements Serializable,Comparable<HistoryDto> {

    private Integer id;
    private String sId;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getSId() {
        return sId;
    }

    public void setSId(String sId) {
        this.sId = sId;
    }

    public String getTrackName() {
        return trackName;
    }

    public void setTrackName(String trackName) {
        this.trackName = trackName;
    }

    public String getTrackDescription() {
        return trackDescription;
    }

    public void setTrackDescription(String trackDescription) {
        this.trackDescription = trackDescription;
    }

    public Integer getUsedNo() {
        return usedNo;
    }

    public void setUsedNo(Integer usedNo) {
        this.usedNo = usedNo;
    }

    public String getExtraInfo() {
        return extraInfo;
    }

    public void setExtraInfo(String extraInfo) {
        this.extraInfo = extraInfo;
    }

    public String getImageUrl() {
        return imageUrl;
    }

    public void setImageUrl(String imageUrl) {
        this.imageUrl = imageUrl;
    }

    public Integer getPartyId() {
        return partyId;
    }

    public void setPartyId(Integer partyId) {
        this.partyId = partyId;
    }

    private String trackName;
    private String trackDescription;
    private Integer usedNo;
    private String extraInfo;
    private String imageUrl;
    private Integer partyId;


    public int compareTo(HistoryDto other) {
        return this.sId.compareTo(other.sId);
    }


}

移除物品

ListA.removeAll(new HashSet(listB));

您可以使用Stream API來做到這一點:

Set<Integer> var2 = list2.stream()
    .map(a -> a.var2)
    .collect(Collectors.toSet());
list1.stream()
    .filter(a -> !var2.contains(a.var2))
    .collect(Collectors.toList());

您需要嵌套2個循環。

偽代碼:

for each in A do
    for each in B do
       if (current item of A equals to current item of B)
           say yes!
    done
done

您只需要將其翻譯成Java。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM