遞歸實現商品SKU

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]]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章