例:一个对象集合[o0,o1,o2,o3,o4,o5,o6,o7,o8,o9]对其随机排列组合为:
[
[o0],
[o1],
[02],
[o3],
... ,
[o9],
[o0,o1],
[o0,o1],
[o0,o2],
... ,
[08,o9],
[o0,01,o2],
[o0,o1,o3],
... ,
[o7,o8,o9],
...
...
...
[o0,o1,o2,o3,o4,o5,o6,o7,o8,o9]
]
下面代码实例:
package Combine;
import net.sf.json.JSONObject;
import java.util.ArrayList; import java.util.List; import
java.util.Stack;
public class CombinePlans {
public static void main(String[] args) {
List<JSONObject> sourceList = new ArrayList<>();
List<List<JSONObject>> resultList = new ArrayList<>();
for (int i = 0; i < 6; i++) {
JSONObject object = new JSONObject();
object.put("name", "o" + i);
object.put("num", i);
sourceList.add(object);
}
for (int j = 0; j <= sourceList.size(); j++) {
CombinePlans.randomCombination(sourceList, j, 0, 0, resultList);
}
for (List<JSONObject> jsonObjects : resultList) {
System.out.println(jsonObjects);
}
}
private static Stack<JSONObject> stack = new Stack();
/**
* @param sourceList 待组合的零散数据 例:[o0,o1,o2,o3,o4,o5,o6,o7,o8,o9]
* @param targ 最大组合个数
* @param has 已组合个数
* @param cur 零散数据起始位置
* @param list 所有组合
* [
* [o0],[o1],[02],[o3], ... ,[o9]
* [o0,o1],[o0,o1],[o0,o2], ... ,[08,o9]
* [o0,01,o2],[o0,o1,o3], ... ,[o7,o8,o9]
* ...
* [o0,o1,o2,o3,o4,o5,o6,o7,o8,o9]
* ]
* @return
*/
public static List<List<JSONObject>> randomCombination(List<JSONObject> sourceList, int targ, int has, int
cur, List<List<JSONObject>> list) {
if (has == targ) {
if (!stack.isEmpty()) {
list.add(new ArrayList<>(stack));
}
return null;
}
for (int i = cur; i < sourceList.size(); i++) {
if (!stack.contains(sourceList.get(i))) {
stack.add(sourceList.get(i));
randomCombination(sourceList, targ, has + 1, i, list);
stack.pop();//将上一组组合清除
}
}
return list;
} }
结果:
[{"name":"o0","num":0}]
[{"name":"o1","num":1}]
[{"name":"o2","num":2}]
[{"name":"o3","num":3}]
[{"name":"o4","num":4}]
[{"name":"o5","num":5}]
[{"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o1","num":1}]
[{"name":"o0","num":0}, {"name":"o2","num":2}]
[{"name":"o0","num":0}, {"name":"o3","num":3}]
[{"name":"o0","num":0}, {"name":"o4","num":4}]
[{"name":"o0","num":0}, {"name":"o5","num":5}]
[{"name":"o0","num":0}, {"name":"o6","num":6}]
[{"name":"o1","num":1}, {"name":"o2","num":2}]
[{"name":"o1","num":1}, {"name":"o3","num":3}]
[{"name":"o1","num":1}, {"name":"o4","num":4}]
[{"name":"o1","num":1}, {"name":"o5","num":5}]
[{"name":"o1","num":1}, {"name":"o6","num":6}]
[{"name":"o2","num":2}, {"name":"o3","num":3}]
[{"name":"o2","num":2}, {"name":"o4","num":4}]
[{"name":"o2","num":2}, {"name":"o5","num":5}]
[{"name":"o2","num":2}, {"name":"o6","num":6}]
[{"name":"o3","num":3}, {"name":"o4","num":4}]
[{"name":"o3","num":3}, {"name":"o5","num":5}]
[{"name":"o3","num":3}, {"name":"o6","num":6}]
[{"name":"o4","num":4}, {"name":"o5","num":5}]
[{"name":"o4","num":4}, {"name":"o6","num":6}]
[{"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o2","num":2}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o3","num":3}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o4","num":4}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o5","num":5}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o2","num":2}, {"name":"o3","num":3}]
[{"name":"o0","num":0}, {"name":"o2","num":2}, {"name":"o4","num":4}]
[{"name":"o0","num":0}, {"name":"o2","num":2}, {"name":"o5","num":5}]
[{"name":"o0","num":0}, {"name":"o2","num":2}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o3","num":3}, {"name":"o4","num":4}]
[{"name":"o0","num":0}, {"name":"o3","num":3}, {"name":"o5","num":5}]
[{"name":"o0","num":0}, {"name":"o3","num":3}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o4","num":4}, {"name":"o5","num":5}]
[{"name":"o0","num":0}, {"name":"o4","num":4}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o3","num":3}]
[{"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o4","num":4}]
[{"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o5","num":5}]
[{"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o6","num":6}]
[{"name":"o1","num":1}, {"name":"o3","num":3}, {"name":"o4","num":4}]
[{"name":"o1","num":1}, {"name":"o3","num":3}, {"name":"o5","num":5}]
[{"name":"o1","num":1}, {"name":"o3","num":3}, {"name":"o6","num":6}]
[{"name":"o1","num":1}, {"name":"o4","num":4}, {"name":"o5","num":5}]
[{"name":"o1","num":1}, {"name":"o4","num":4}, {"name":"o6","num":6}]
[{"name":"o1","num":1}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o4","num":4}]
[{"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o5","num":5}]
[{"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o6","num":6}]
[{"name":"o2","num":2}, {"name":"o4","num":4}, {"name":"o5","num":5}]
[{"name":"o2","num":2}, {"name":"o4","num":4}, {"name":"o6","num":6}]
[{"name":"o2","num":2}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o3","num":3}, {"name":"o4","num":4}, {"name":"o5","num":5}]
[{"name":"o3","num":3}, {"name":"o4","num":4}, {"name":"o6","num":6}]
[{"name":"o3","num":3}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o4","num":4}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o3","num":3}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o4","num":4}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o5","num":5}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o3","num":3}, {"name":"o4","num":4}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o3","num":3}, {"name":"o5","num":5}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o3","num":3}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o4","num":4}, {"name":"o5","num":5}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o4","num":4}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o4","num":4}]
[{"name":"o0","num":0}, {"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o5","num":5}]
[{"name":"o0","num":0}, {"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o2","num":2}, {"name":"o4","num":4}, {"name":"o5","num":5}]
[{"name":"o0","num":0}, {"name":"o2","num":2}, {"name":"o4","num":4}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o2","num":2}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o3","num":3}, {"name":"o4","num":4}, {"name":"o5","num":5}]
[{"name":"o0","num":0}, {"name":"o3","num":3}, {"name":"o4","num":4}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o3","num":3}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o4","num":4}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o4","num":4}]
[{"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o5","num":5}]
[{"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o6","num":6}]
[{"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o4","num":4}, {"name":"o5","num":5}]
[{"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o4","num":4}, {"name":"o6","num":6}]
[{"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o1","num":1}, {"name":"o3","num":3}, {"name":"o4","num":4}, {"name":"o5","num":5}]
[{"name":"o1","num":1}, {"name":"o3","num":3}, {"name":"o4","num":4}, {"name":"o6","num":6}]
[{"name":"o1","num":1}, {"name":"o3","num":3}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o1","num":1}, {"name":"o4","num":4}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o4","num":4}, {"name":"o5","num":5}]
[{"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o4","num":4}, {"name":"o6","num":6}]
[{"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o2","num":2}, {"name":"o4","num":4}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o3","num":3}, {"name":"o4","num":4}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o4","num":4}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o5","num":5}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o4","num":4}, {"name":"o5","num":5}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o4","num":4}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o3","num":3}, {"name":"o4","num":4}, {"name":"o5","num":5}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o3","num":3}, {"name":"o4","num":4}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o3","num":3}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o4","num":4}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o4","num":4}, {"name":"o5","num":5}]
[{"name":"o0","num":0}, {"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o4","num":4}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o2","num":2}, {"name":"o4","num":4}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o3","num":3}, {"name":"o4","num":4}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o4","num":4}, {"name":"o5","num":5}]
[{"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o4","num":4}, {"name":"o6","num":6}]
[{"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o4","num":4}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o1","num":1}, {"name":"o3","num":3}, {"name":"o4","num":4}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o4","num":4}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o4","num":4}, {"name":"o5","num":5}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o4","num":4}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o4","num":4}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o3","num":3}, {"name":"o4","num":4}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o4","num":4}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o4","num":4}, {"name":"o5","num":5}, {"name":"o6","num":6}]
[{"name":"o0","num":0}, {"name":"o1","num":1}, {"name":"o2","num":2}, {"name":"o3","num":3}, {"name":"o4","num":4}, {"name":"o5","num":5}, {"name":"o6","num":6}]