2012-01-22 2 views
2

모음집은 Collection<Pair<classA, Collection<classB>>>입니다. 이제 컬렉션에서 가능한 모든 쌍으로 뭔가를하고 싶습니다. 그리고 쌍을 반복하고 싶지 않습니다. 즉, [a, b]를 비교하면, 나는 잘 모릅니다. [b, a]. 내가 생각 한 가지 해결책은 모든 고유 쌍을 comapre 다음 컬렉션에서 multimap은을하고 있었다,하지만 내가 도와 받기 (I) 같은java의 모든 고유 한 쌍을 비교하십시오. Collection

for(int i = 0; i<map.size()-1; i++) 
for(int j = i+1; j<map.size()-1; j++) 
dosomething(multimap.getvalue(i), multimap.getValue(j)); 

을 의미, 우리는 또한지도에서 인덱스 바이스 요소를 사용하지 못할 것 같다 이 문제를 푸는 데 많은 마음을 사용하고 많은 검색을했지만 알아낼 수 없었습니다. 희망을 좀 천재 여기 날 도울 수 있습니다.

미리 감사드립니다.

+0

기다려주십시오. a와 b가 같은 유형입니까? –

답변

1

내가 여기 유형에 완전히 명확하지,하지만 난이 클래스는 UnorderedPair라는 만들 것 :

class UnorderedPair { 
    Object a; // or whatever type should go here 
    Object b; 
    public int hashCode() { return a.hashCode() + b.hashCode(); } 
    public boolean equals(Object o) { 
    if (o instanceof UnorderedPair) { 
     UnorderedPair other = (UnorderedPair) o; 
     return (a.equals(other.a) && b.equals(other.b)) 
      || (a.equals(other.b) && b.equals(other.a)); 
    } 
    return false; 
    } 
} 

그런 다음 당신은 그냥 쌍 표시가 끝난 상태를 추적하기 위해 Set를 사용할 수 있습니다

Set<UnorderedPair> seen = new HashSet<UnorderedPair>(); 
...look at a and b... 
UnorderedPair p = new UnorderedPair(a, b); // or a factory would be nicer 
if(seen.add(p)) { 
    // this is a new pair 
    doThingWith(a, b); 
} 
관련 문제