2017-05-04 100 views
0

我有一個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

哦,它確實工作,但你可能做得不正確。你可能想在這裏發佈,所以人們可以真正幫助你。 –

回答

1

請求您可以使用流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

1

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

相關問題