2017-05-04 11 views
0

나는 아래의 구조Java에서 객체의 하나의 멤버 변수를 기반으로 다른 arraylist에있는 arraylist에서 객체를 제거하려면 어떻게합니까?

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

내가 두 ArrayList<A> List1 다른 크기 List2이와 POJO 클래스 A를 가지고있다. List2에 이미있는 List1의 모든 요소를 ​​제거하고 var2에 저장된 값과 관련하여이 동등성을 검사해야합니다.

나는 목록을 Hashset으로 만들고 removeAll()을 사용했는지 확인했습니다. 그러나 동일한 var2의 경우 var1 값이 다르기 때문에 원하는 결과를 얻을 수 없습니다.

이 문제를 해결할 수 있도록 도와주세요.

편집 1 - 제거 항목

ListA.removeAll(new HashSet(listB)); 
+3

'Compareable '구현은 어떻습니까? –

+0

@ MuratK. 노력하고 작동하지 않습니다. 감사합니다 – hybrid

+0

아, 확실히 작동하지만, 아마 제대로하지 않았어. 사람들이 실제로 당신을 도울 수 있도록 여기에 게시하고 싶을 수도 있습니다. –

답변

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


} 

무라트

에 의해 요청 된 당신은 스트림 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' 두 개의리스트를 정의해야합니다. * Java Streams * 및 * Java Lambdas *를 사용하기 때문에 * Java 1.8 *로 빌드해야합니다. – Harmlezz

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 

당신은 자바로 번역해야합니다.

+0

나는 그것을 끝내었다. – hybrid