比较java集合中的所有唯一对

比较java集合中的所有唯一对,java,Java,我有一个类型为collection的集合。现在,我想对这个系列中每一双可能的鞋都做些什么,我不想重复这一双。我想的一个解决方案是从集合中生成一个多重映射,然后合并所有唯一的对,但似乎我们也不能在映射中使用索引虎钳元素,我指的是像get(I)这样的东西 for(int i=0;i我不完全清楚这里的类型,但我要创建一个名为UnorderedPair)的类: class UnorderedPair { Object a; // or whatever type should go here O

我有一个类型为
collection
的集合。现在,我想对这个系列中每一双可能的鞋都做些什么,我不想重复这一双。我想的一个解决方案是从集合中生成一个多重映射,然后合并所有唯一的对,但似乎我们也不能在映射中使用索引虎钳元素,我指的是像get(I)这样的东西


for(int i=0;i我不完全清楚这里的类型,但我要创建一个名为
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<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);
}
Set seen=new HashSet();
…看看a和b。。。
无序对p=新的无序对(a,b);//或者工厂会更好
如果(见添加(p)){
//这是一双新的
与(a,b)相关;
}

等等。a和b是同一类型的吗?
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);
}