java 多个集合 每个集合取其中一个,进行排列
工作中遇到一个拆分的算法问题。要把几个数组或者集合,组合起来。每个集合或数组只取一个。想了老半天没有想到,问几个人都说很简单吗,他们都举了一个例子,然后进行遍历。当我说我想要个通用方法的时候,都卡住了,需要花一点时间去想了。
代码:
public classTest {
List>listTo=newArrayList>();
publicList> getList1( List> lists){
for(inti =0; i < lists.get(0).size() ; i++){
ArrayList st1 =newArrayList();
st1.add(lists.get(0).get(i));
if(lists.size() ==2){
for(intj =0; j < lists.get(1).size() ; j++){
ArrayList st2 =newArrayList();
st2 = (ArrayList)st1.clone();
String s = lists.get(lists.size() -1).get(j);
st2.add(s);
listTo.add(st2);
}
}else{
listTo=this.tm1(lists,1, st1);
}
}
returnlistTo;
}
publicList> tm1(List> lists ,intj,ArrayList st){
for(inti =0; i < lists.get(j).size() ; i++){
ArrayList st1 =newArrayList();
st1 = (ArrayList)st.clone();
st1.add(lists.get(j).get(i));
if(j == lists.size() -2){
for(intt =0; t < lists.get(lists.size() -1).size() ; t++){
ArrayList st2 =newArrayList();
st2 = (ArrayList)st1.clone();
String s = lists.get(lists.size() -1).get(t);
st2.add(s);
listTo.add(st2);
}
}else{
this.tm1(lists,j+1,st1);
}
}
returnlistTo;
}
public static voidmain(String[] args){
List strings1 =newArrayList();
List strings2 =newArrayList();
List strings3 =newArrayList();
List strings4 =newArrayList();
strings1.add("1");
strings1.add("3");
strings2.add("1");
strings2.add("2");
strings3.add("1");
strings3.add("2");
strings3.add("3");
List> lists =newArrayList>();
lists.add(strings1);
lists.add(strings2);
lists.add(strings3);
Test test =newTest();
List> list1 = test.getList1(lists);
intj =0;
for(List l : list1){
System.out.println(l.get(0) +"-"+ l.get(1) +"-"+ l.get(2) +"********"+ j);
j++;
}
}
}