Java实现商品sku属性组合

开发中实现商品模块时,会遇到商品sku组合问题,有两种解决方案,一种由前端实现sku属性组合然后传递到后台;第二种则由后台实现,这里就来记录一下,如何使用java的for循环实现sku商品属性组合:

 public static void getSku(List<List<String>> sourceList){
        //获取sourceList集合中的第一组属性集合
        List<List<String>> targetList = Arrays.asList(sourceList.get(0));
        //从sourceList集合的第二组属性集合开始遍历
        for (int i = 1; i < sourceList.size(); i++) {
            List<String> nextList = sourceList.get(i);
            //遍历第二组属性集合与第一组属性集合组合
            //设置一个中间数组来存储属性组合后的数据
            List<List<String>> tempList = new ArrayList<>();
            for (String nextStr : nextList) {
                for (List<String> targetStrList : targetList) {
                    for (String targetStr : targetStrList) {
                        //将组合后的属性组合放入临时数组中
                        tempList.add(Arrays.asList(targetStr+","+nextStr));
                    }
                }
            }
            System.out.println("第"+i+"次,组合后,temp集合----------------");
            for (List<String> tempStr : tempList) {
                System.out.println(tempStr);
            }
            //一组属性组合后,将临时数组中的数据,赋值给targetList,供下次属性组合使用。
            targetList = tempList;
        }
        System.out.println("-------------------最终结果------------------------");
        for (List<String> str : targetList) {
            System.out.println(str);
        }
    }

    public static void main(String[] args) {
        List<List<String>> skuList = new ArrayList<>();
        //属性集合:颜色
        List<String> list1 = new ArrayList<>();
        list1.add("红");
        list1.add("黄");
        list1.add("蓝");
        //属性集合:尺码
        List<String> list2 = new ArrayList<>();
        list2.add("S");
        list2.add("M");
        list2.add("L");
        //属性集合:款式
        List<String> list3 = new ArrayList<>();
        list3.add("男");
        list3.add("女");
        skuList.add(list1);
        skuList.add(list2);
        skuList.add(list3);
        getSku(skuList);
    }

实现思路:将上次的属性组合结果存放起来,供下组属性来遍历拼接组合。


版权声明:本文为qq_42721085原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。