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

标签 java

我有一个 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/

相关文章:

java - 如何在集成测试(OpenEjb)中测试有状态 session bean 的钝化?

java - 编码问题

java - 如何在 javafx 中将图像裁剪成碎片,以便用图 block 创建游戏拼图?

java - 小时是否在跨越 2 天的时间范围内?

java - 使用 Android 模式实现电子邮件 validator

Java setResizable 问题

java - 如何调用一个类,以便方法根据该类中的变量执行特定操作

java - 将 LinkedList 添加到包含 LinkedList 的 LinkedList 并更改添加的 LinkedList

java - 如何在 Windows 中使用粗略计时器分辨率编写 Java Thread.sleep() 代码

java - 公共(public)网-3.1