java 几个集合(每个集合取一个数) 进行排序

工作中遇到一个集合拆分的算法问题。要把几个数组或者集合,组合起来。每个集合或数组只取一个。想了老半天没有想到,问几个人都说很简单吗,他们都举了一个例子,然后进行遍历。当我说我想要个通用方法的时候,都卡住了,需要花一点时间去想了

难点在于:1.因为我门不知道别人给我传多少个集合,每个集合长度多少。 2.他们的交集在哪里

下面就是我写的代码:

import java.util.ArrayList;
import java.util.List;

/**
 * Created by admini on 2017/5/5.
 */
public class Test {

    List<List<String>> listTo = new ArrayList<List<String>>();
    public  List<List<String>>  getList1( List<List<String>> lists){

        for (int i = 0 ; i < lists.get(0).size() ; i++){
            ArrayList<String> st1 = new ArrayList<String>();
            st1.add(lists.get(0).get(i));
            if(lists.size() == 2){
                for (int j = 0 ; j < lists.get(1).size() ; j++){
                    ArrayList<String> st2 = new ArrayList<String>();
                    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);
            }
        }
        return listTo;
    }

    public  List<List<String>>  tm1(List<List<String>> lists , int j,ArrayList<String> st){
        for (int i = 0 ; i < lists.get(j).size() ; i++){
            ArrayList<String> st1 = new ArrayList<String>();
            st1 = (ArrayList)st.clone();
            st1.add(lists.get(j).get(i));
            if(j ==  lists.size() -2){
                for (int t = 0 ; t < lists.get(lists.size() -1).size() ; t++){
                    ArrayList<String> st2 = new ArrayList<String>();
                    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);
            }
        }
        return listTo;
    }

    public static  void  main(String[] args){
        List<String> strings1 = new ArrayList<String>();
        List<String> strings2 = new ArrayList<String>();
        List<String> strings3 = new ArrayList<String>();

        strings1.add("1");
        strings1.add("3");

        strings2.add("1");
        strings2.add("2");

        strings3.add("1");
        strings3.add("2");
        strings3.add("3");

        List<List<String>> lists = new ArrayList<List<String>>();

        lists.add(strings1);
        lists.add(strings2);
        lists.add(strings3);


        Test test = new Test();
        List<List<String>> list1 = test.getList1(lists);

        int j = 0;
        for (List<String> l : list1){
            System.out.println(l.get(0) + "-" + l.get(1) + "-" + l.get(2) + "********" + j);
            j++;
        }


    }
}
结果就自己运行一下,看看了。如果是数组的道理也是一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值