我有一个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);
}

09-27 12:26