2012-04-08 3 views
1

다음 문제에 대한 해결책을 찾기 위해 마음이 아프다. 데이터베이스에서 값을 가져 오는 4 개의 다른 ArrayList가 있습니다. 크기는 0부터 (포함)까지 가능합니다. 각 목록의 크기와 값이 다를 수 있습니다. 내가 효과적으로하려고하는 것은 다음과 같습니다. 모든 비 0 크기 목록을 비교하고 공통 정수가 있는지 그리고 그 값이 무엇인지 확인하십시오.ArrayList를 비교하여 공유 값을 얻습니다.

아이디어가 있으십니까? 감사합니다. 당신이 비어있는 제외한 모든 일반적인 정수의 집합이 필요한 경우

답변

6

: 결국에

List<List<Integer>> lists = ... 
Collection<Integer> common = new HashSet<Integer>(lists.get(0)); 
for (int i = 1; i < lists.size(); i++) { 
    if (!lists.get(i).isEmpty()) 
    common.retainAll(lists.get(i)); 
} 

common 정수를 포함 모두 공통 그.

+1

목록 중 하나가 비어 있으면이 방법이 효과가 있습니까? 비어있는 경우 목록의 나머지 부분에 공통 값이 있는지 알 필요가 있기 때문입니다. – Vagelism

+1

무엇이 필요합니까? 모든 목록에있는 일반 정수 또는 정수 집합입니다. 각 정수는 최소한 두 개 이상에 공통적으로 사용됩니다. –

+0

값이있는 모든 목록에 공통된 정수만 있습니다. 값이 없으면 비교할 필요가 없습니다. 예를 들어 목록 중 3 개에 공통 값이 있는지 알고 싶다면 값이 있습니다 3 명 중이 가치는 무엇입니까? – Vagelism

2

당신은이 컬렉션의 교회법을 얻을 수 CollectionUtils.intersection()을 아파치 평민을 사용하고자 할 수도 있습니다 ...

이 반복적으로 교차을 생성하고,이 완료되면이 비어 있지 않은 경우 - 당신은 공통 요소를 가지고 이 컬렉션에 있습니다.

빈 목록 : 해당 size()이 0인지 확인하고,이 목록이 맞지 않으면 -이 목록을 건너 뜁니다.

0

이렇게 할 수 있습니다. 검색 할 요소가 여러 개인 경우 검색을 루프에 넣으십시오.

List aList = new ArrayList(); aList.add (새 정수 (1));

는 경우 (!! aList는 = null이 & & aList.isEmpty()) { 는 경우 (aList.contains (1)) { 에서 System.out.println는 ("그것을 가지고"); } }

2

ArrayList 개체에 교차 설정 작업을 사용할 수 있습니다. 이 같은

뭔가 : 이제

List<Integer> l1 = new ArrayList<Integer>(); 

l1.add(1); 
l1.add(2); 
l1.add(3); 

List<Integer> l2= new ArrayList<Integer>(); 
l2.add(4); 
l2.add(2); 
l2.add(3); 

List<Integer> l3 = new ArrayList<Integer>(l2); 
l3.retainAll(l1); 

, L3는 L1과 L2 사이의 유일한 공통 요소가 있어야합니다.

+0

2 개 목록으로 쉽게 보입니다! 지금 4가있는 경우에 우리는 마녀에는 가치가다는 것을 있건 없건간에 모른다? – Vagelism

관련 문제