如果我得到这样的数组:
String[] items = { "Cat", "Frog", "Dog", "Ferret"};
例如,在这种情况下,所有3项组合都是(如果我没有错过):
String[][] combinations = {
{ "Cat", "Frog", "Dog" },
{ "Cat", "Dog", "Ferret" },
{ "Cat", "Frog", "Ferret" },
{ "Frog", "Dog", "Ferret" } };
如何使用java方法获取可变数量项的所有可能的x项组合?
答案 0 :(得分:1)
您可以使用combinatoricslib
apache commons math开发版中还有一个生成整数组合的函数:CombinatoricsUtils.combinationsIterator (3.3)
您可以使用该函数为您生成索引String数组,然后使用这些索引以实际值填充数据。
public static Iterator<int[]> combinationsIterator(int n, int k)
返回一个迭代器,其范围是{0,...,n的k元素子集 - 1}表示为int []数组。迭代器返回的数组按降序排序,并以字典形式访问它们 顺序从右到左有意义。例如, combinationIterator(4,2)返回一个将生成的Iterator 在对next()的连续调用中遵循数组序列:[0,1], [0,2],[1,2],[0,3],[1,3],[2,3]
修改强>
正如OP提到的,这是一个开发版本,所以要下载你必须从这里检查他们的来源:source然后自己构建(使用maven)
答案 1 :(得分:0)
static void combinations2(String[] arr, int len, int startPosition, String[] result, ArrayList<String[]> allResults){
if (len == 0){
String[] copy = new String[result.length];
System.arraycopy(result,0,copy,0,result.length);
allResults.add(copy);
return;
}
for (int i = startPosition; i <= arr.length-len; i++){
result[result.length - len] = arr[i];
combinations2(arr, len-1, i+1, result, allResults);
}
}
用法示例:
ArrayList<String[]> allResults = new ArrayList<String[]>();
String[] items = { "Cat", "Frog", "Dog", "Ferret"};
combinations2(items, 3, 0, new String[3], allResults);