public class Application {
public static void main(String[] args) {
String [] a1 = {"紅色","黑色","黃色"};
String [] a2 = {"32G","64G","128G"};
String [] a3 = {"5寸","6寸"};
String [] a5 = {"1M","2M"};
String [] a6 = {"2M高","3M高","4M高"};
List<String[]> initList = new ArrayList<>();
initList.add(a1);
initList.add(a2);
initList.add(a3);
initList.add(a5);
initList.add(a6);
List<Set> returnList = new ArrayList<>();
Set<Object> objects = new LinkedHashSet<>();
init(returnList,initList,objects,0);
//SpringApplication.run(Application.class, args);
}
public static void init(List<Set> returnList , List<String []> pList,Set set,int level){
if(level == pList.size()-1){
String[] strings = pList.get(pList.size()-1);
LinkedHashSet<Object> tt = new LinkedHashSet<>();
tt.addAll(set);
for(int i = 0;i< strings.length;i++){
LinkedHashSet<Object> t = new LinkedHashSet<>();
t.addAll(set);
t.add(strings[i]);
returnList.add(t);
System.out.println(t.toString());
t.clear();
t.addAll(tt);
continue;
}
return;
}else{
int tl = level;
String[] strings = pList.get(tl);
//保留上一次進來時的數據,用作下級初始化完成後數據替換
LinkedHashSet<Object> nt = new LinkedHashSet<>();
nt.addAll(set);
for(int i=0;i<strings.length;i++){
if(tl == 0){
set = new LinkedHashSet<>();
}
set.add(strings[i]);
if(i == 0){
level++;
}
init(returnList,pList,set,level);
set.clear();
set.addAll(nt);
}
}
更加簡單方法使用gava的 Sets
Set s1 = new HashSet();
Set s2 = new HashSet();
s1.add("紅色");
s1.add("黑色");
s1.add("黃色");
s2.add("32G");
s2.add("64G");
s2.add("128G");
Set set = Sets.cartesianProduct(s1, s2);
System.out.println(set.toString());
[[黑色, 128G], [黑色, 32G], [黑色, 64G], [黃色, 128G], [黃色, 32G], [黃色, 64G], [紅色, 128G], [紅色, 32G], [紅色, 64G]]