我有一个Collection<Pair<classA, Collection<classB>>>
类型的集合。现在,我想对集合中的每个可能的对做某事,并且我不想重复对,即如果我比较了[a,b],则不想比较[b,a]。我在想的一个解决方案是从集合中制作一个多图,然后比较所有唯一对,但是似乎我们也不能在地图中使用索引钳位元素,我的意思是像get(i)
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));
请帮助我解决这个问题。用了很多心思并做了很多搜索,但无法弄清楚。希望一些天才可以在这里帮助我。
在此先多谢!
最佳答案
我对这里的类型不完全清楚,但是我将创建一个名为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);
}