我有一个 Collection<Pair<classA, Collection<classB>>>
类型的集合.现在我想对集合中的每个可能的对做一些事情,我不想重复对,即如果我比较了 [a,b],我不想比较 [b,a]。我在想的一个解决方案是从集合中制作一个多图,然后将所有唯一对组合在一起,但似乎我们也不能在 map 中使用索引 vise 元素,我的意思是像 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);
}
关于java - 比较 java 集合中的所有唯一对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8958439/