2012-01-22 8 views
2

私はCollection<Pair<classA, Collection<classB>>>のコレクションを持っています。今私はコレクション内の可能なすべてのペアで何かしたいと思うし、ペアを繰り返す必要はありません。つまり、私が[a、b]を比較していれば、わかりません[b、a]。私が考えていた一つの解決策は、コレクションからマルチマップを作成し、すべてのユニークなペアをcomapreことだったが、我々はまた、マップ内のインデックス万力要素を使用傾けるようで、私は、get(I)Java内のすべてのユニークなペアを比較します。

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); 
} 
関連する問題