商品规格属性(SKU)组合算法

借鉴java 开发之商品规格属性(SKU)组合算法_Runt02的博客-CSDN博客_java 商品属性

 public List<LinkedHashMap<String, String>>  specesPlanNumeration(LinkedList<LinkedHashMap<String, String[]>> namelist){


       //创建存放有序map集合
       List<LinkedHashMap<String, String>> mapList=new LinkedList<>();


       //判断传入参数是否为空
        if( namelist.size()==0){
            return mapList;
        }


       //1.便利传入参数
        namelist.get(0);
        LinkedHashMap<String, String[]> stringLinkedHashMap = namelist.get(0);
        stringLinkedHashMap.forEach((key,value)->{
            for (String s : value) {
                LinkedHashMap<String, String>mapo = new LinkedHashMap<>(16, 0.75f, true);
                mapo.put(key,s);
                //创建有序map
                LinkedHashMap<String, String>map = new LinkedHashMap<>(16, 0.75f, true);
                //创建下级集合
                LinkedList<LinkedHashMap<String, String[]>> lists=new LinkedList<>();
                //除去下标0的数据,其他存入下级集合
                for (int i1 = 1; i1 < namelist.size(); i1++) {
                    lists.add(namelist.get(i1));
                }
                addxxx(mapList, map,mapo,lists);
            }
        });



        return mapList;

    }

此处用LinkedMap,我是为了防止map的无须造成重复插入,后来一看想多了。但还是用在这里了。

   private void addxxx(List<LinkedHashMap<String, String>> mapList, LinkedHashMap<String, String> map,  LinkedHashMap<String, String> mapo, LinkedList<LinkedHashMap<String, String[]>> lists) {

        if(lists.size() == 0 || lists.get(0).size() == 0){
                map.putAll(mapo);
                mapList.add(map);
        }else{
            map.putAll(mapo);
            LinkedHashMap<String, String[]> stringLinkedHashMap = lists.get(0);
            stringLinkedHashMap.forEach((key,value)->{
                for (String s : value) {
                    LinkedHashMap<String, String>mapx = new LinkedHashMap<>(16, 0.75f, true);
                    mapx.put(key,s);
                    LinkedList<LinkedHashMap<String, String[]>> listx=new LinkedList<>();
                    for (int i = 1; i < lists.size(); i++) {
                        listx.add(lists.get(i));
                    }
                    LinkedHashMap<String, String> mapobj=new LinkedHashMap<>();
                    mapobj.putAll(map);
                    addxxx(mapList,mapobj,mapx,listx);
                }
            });

        }
    }

测试代码:数据库中商品规格我存的是JSON类型的字段,映射到DAO是String

 /**
     * 商品规格拆分测试
     * @param args
     */
    public static void main(String[] args) {
        String attributeList = "[{\"id\":\"4152cfe0-6ecd-11ec-b8b3-853d52bc4840\",\"name\":\"kkk\",\"item\":[\"1\",\"2\",\"3\"],\"input\":false,\"attr\":\"3\"},{\"id\":\"46fba250-6ecd-11ec-b8b3-853d52bc4840\",\"name\":\"vvv\",\"item\":[\"a\",\"b\",\"c\"],\"input\":false,\"attr\":\"c\"}]";
        JSONArray jsonArray = JSONArray.parseArray(attributeList);
        LinkedList<LinkedHashMap<String, String[]>> namelist = new LinkedList<>();
        LinkedList<List<String>> sd = new LinkedList<>();
        for (int i = 0; i < jsonArray.size(); i++) {
            JSONObject object = jsonArray.getJSONObject(i);
            LinkedHashMap<String, String[]> cc = new LinkedHashMap<>(16, 0.75f, true);
            String name = (String) object.get("name");
            String item = object.get("item").toString();
            String[] strings = toArray(item);
            List<String> templatesList = JSON.parseArray(item, String.class);
            sd.add(templatesList);
            cc.put(name, strings);
            namelist.add(cc);
        }
        List<LinkedHashMap<String, String>> linkedHashMaps = new SpecAlgorithm<String>().specesPlanNumeration(namelist);

        for (LinkedHashMap<String, String> linkedHashMap : linkedHashMaps) {
            AtomicInteger a= new AtomicInteger(1);
            linkedHashMap.forEach((key,value)->{
                System.out.println(a.getAndIncrement()+1);
                System.out.println(key+"---------"+value);

            });
        }

    }

运行得出9种组合:现在为MAP 转换成json即可
kkk---------1
vvv---------a
kkk---------1
vvv---------b
kkk---------1
vvv---------c

---------------------------
kkk---------2
vvv---------a
kkk---------2
vvv---------b
kkk---------2
vvv---------c

----------------------------
kkk---------3
vvv---------a
kkk---------3
vvv---------b
kkk---------3
vvv---------c

感谢上文链接的老哥文章帮助

写的不好,希望其中某处也能帮助到各位屁股

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用内容,可以得知在Vue3中处理商品规格SKU的问题时,首先需要考虑将商品的所有规格渲染上去,并且可以根据数据得知该商品有三种规格:颜色、运行内存和存储。 在判断商品规格SKU的库存时,需要注意每点击一个规格属性,都要去判断其他规格属性是否有库存。这可以通过选中完整的规格信息来向父组件传递有效的数据,包括SKU的ID、价格、原价格、库存以及商品的说明等。 因此,在Vue3中处理商品规格SKU的方式可以是通过渲染所有规格属性,并在选中完整的规格信息后,通过传递有效数据来判断SKU的库存情况。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [基于Vue3 Sku的设计](https://blog.csdn.net/qq_43817005/article/details/121889677)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [vue电商项目sku 规格 详细步骤](https://blog.csdn.net/m0_46846526/article/details/119142417)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值