有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓如何根据Java中对象的一个成员变量从arraylist中删除另一个arraylist中存在的对象?

我有一个POJO a级,结构如下

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

我有两个大小不同的ArrayList<A> List1List2。我想删除List1中已经存在于List2中的所有元素,并且需要根据var2中存储的值检查此相等性

我已经检查过让列表成为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));

共 (2) 个答案

  1. # 1 楼答案

    需要嵌套两个循环

    伪代码:

    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

  2. # 2 楼答案

    您可以使用流API

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