如何从基于Java对象的一个​​成员变量的另一个ArrayList中的ArrayList中删除对象?

问题描述:

我有一个POJO类A与下面结构如何从基于Java对象的一个​​成员变量的另一个ArrayList中的ArrayList中删除对象?

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

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

我已经检查了使列表a​​和使用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)); 
+3

如何实现'Compareable ''? –

+0

@MuratK。尝试过,并没有工作。谢谢 – hybrid

+0

哦,它确实工作,但你可能做得不正确。你可能想在这里发布,所以人们可以真正帮助你。 –

请求您可以使用流API做到这一点:

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

该项目是建立在Java7 – hybrid

+0

当然。你需要定义两个列表:'list2'和'list1',其中包含你的元素类型'A'。您需要使用* Java 1.8 *来构建它,因为它使用* Java Streams *和* Java Lambdas *。 – Harmlezz

您需要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。

+0

我最终做到了。 – hybrid