public class TestSku {
private static String[] aa = { "aa1", "aa2" };
private static String[] bb = { "bb1", "bb2", "bb3" };
private static String[] cc = { "cc1", "cc2", "cc3", "cc4" };
private static String[][] xyz = { aa, bb, cc};
private static int counterIndex = xyz.length - 1;
private static int[] counter = { 0, 0, 0 };
public static void main(String[] args){
for (int i = 0; i < aa.length * bb.length * cc.length; i++) {
System.out.print(aa[counter[0]]);
System.out.print("\t");
System.out.print(bb[counter[1]]);
System.out.print("\t");
System.out.print(cc[counter[2]]);
System.out.println();
handle();
}
}
public static void handle() {
System.out.println("counterIndex:"+counterIndex);
counter[counterIndex]++;
if (counter[counterIndex] >= xyz[counterIndex].length) {
counter[counterIndex] = 0;
counterIndex--;
if (counterIndex >= 0) {
handle();
}
counterIndex = xyz.length - 1;
}
}
}
二:
public class TestSku2 {
public static void main(String[] args) {
String str ="1,3,6,7==4,5,8,9==3,4==43,45,8,9==35,4";
List<String> result = descartes(str);
System.out.println(result);
}
// @SuppressWarnings("rawtypes")
public static List<String> descartes(String str) {
String[] list = str.split("==");
List<List> strs = new ArrayList<List>();
for(int i=0;i<list.length;i++){
strs.add(Arrays.asList(list[i].split(",")));
}
System.out.println(strs);
int total = 1;
for(int i=0;i<strs.size();i++){
total*=strs.get(i).size();
}
String[] mysesult = new String[total];
int now = 1;
//每个元素每次循环打印个数
int itemLoopNum = 1;
//每个元素循环的总次数
int loopPerItem =1;
for(int i=0;i<strs.size();i++){
List temp = strs.get(i);
now = now*temp.size();
//目标数组的索引值
int index=0;
int currentSize = temp.size();
itemLoopNum = total/now;
loopPerItem = total/(itemLoopNum*currentSize);
int myindex = 0;
for(int j=0;j<temp.size();j++){
//每个元素循环的总次数
for(int k=0;k<loopPerItem;k++){
if(myindex==temp.size())
myindex=0;
//每个元素每次循环打印个数
for(int m=0;m<itemLoopNum;m++){
mysesult[index]=(mysesult[index]==null?"":mysesult[index]+",")+((String)temp.get(myindex));
index++;
}
myindex++;
}
}
}
return Arrays.asList(mysesult);
}
protected static List<String> fn(List<Object[]> list, Object[] arr, String result, String separator) {
//迭代list
List<String> li = new ArrayList<String>();
//取得当前的数组
int i = list.indexOf(arr);
//迭代数组
for (Object st : arr) {
if (StringUtils.isNotBlank(result)) {
st = result + separator + st;
}
if (i < list.size() - 1) {
li.addAll(fn(list, list.get(i + 1), st.toString(), separator));
} else if (i == list.size() - 1) {
li.add(st.toString());
}
}
return li;
}
}