我需要迭代两个元素的所有组合:在集合 [1,2,3,4] 中,我想迭代 [(1,2),(1,3),(1,4), (2,3),(2,4),(3,4)]。有现成的工具可以做到这一点吗?
// Not what I need, works wrong!
for (Object o1 : set) {
for (Object o2 : set) {
if (o1 == o2) continue;
...
}
}
此代码将执行比所需操作多两倍的操作,因为每个对象都会在两个循环中被访问。
为此编写自己的方法很简单,我只是不想发明轮子。我希望在 Guava 或 Collections API 中找到这个功能,但没有找到这样的功能。
最佳答案
https://code.google.com/p/combinatoricslib/ 简单组合部分说明了该实用程序的用法。 与 2 个元素的组合将产生您想要的结果。
// Create the initial vector
ICombinatoricsVector<String> initialVector = Factory.createVector(
new String[] { "red", "black", "white", "green", "blue" } );
// Create a simple combination generator to generate 3-combinations of the initial vector
Generator<String> gen = Factory.createSimpleCombinationGenerator(initialVector, 3);
// Print all possible combinations
for (ICombinatoricsVector<String> combination : gen) {
System.out.println(combination);
}
关于java - 迭代所有唯一的二元素组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23562297/