java 开发之商品规格属性(SKU)组合算法

java 开发之商品规格属性(SKU)组合算法

开发背景

一般在开发商城的时候都会遇到商品规格组合的问题, 在这个开发过程中就需要一套算法用来组合多个规格属性,用来给每个组合定一组封面图和价格

比如某宝的

在这里插入图片描述

直接发代码


/**
 * 商品规格组合算法
 */
public class SpecAlgorithm<T>{

    /**
     * 商品规格组合 T 泛型不限对象类型,可以是基本数据类型,也可以是String 或自定义类
     *
     * @param lists 设置的规格(传入的参数数量应对的是多少级的规格,T为声明的规格对象)
     * @return 返回的组合集合  数量公式 AxBxC...=N;
     */
    public  List<List<T>> specesPlan(List<T>...lists){
        Log.i("algorit",lists.toString());
        List<List<T>> arrays = new ArrayList<>();
        if(lists.length == 0 ){
            return arrays;
        }
        for(T object :lists[0]){
            List<T> newObj = new ArrayList<>();
            List<List<T>> arrayList = new ArrayList<>();
            for(int i = 1 ; i < lists.length ; i ++){
                arrayList.add(lists[i]);
            }
            addPlan(arrays,newObj,object,arrayList);
        }
        return arrays;
    }

    /**
     *
     * @param arrs      要返回的集合
     * @param newObjs  规划表
     * @param object    上一级的对象
     * @param lists     下级的集合
     */
    private void addPlan(List<List<T>> arrs, List<T> newObjs, T object, List<List<T>> lists){
        if(lists.size() == 0 || lists.get(0).size() == 0){
            newObjs.add(object);
            arrs.add(newObjs);
        }else {
            newObjs.add(object);
            for(T obj :lists.get(0)){
                List<List<T>> arrays = new ArrayList<>();
                for(int i = 1 ; i < lists.size() ; i ++){
                    arrays.add(lists.get(i));
                }
                ArrayList<T> objects = new ArrayList<>();
                objects.addAll(newObjs);
                addPlan(arrs, objects,obj,arrays);
            }
        }
    }

}

使用方式

//简单用String类型 来进行组合。 根据需求可以使用自定义类
String[] style = {"简朴","风采"};//风格 
String[] color = {"黄","白","黑"};//颜色
String[] size = {"41","42","43","44"};//尺寸
// String 映射, 可根据需求使用其他类型或自定义类。不懂什么是泛型 就得先了解泛型了
List<List<String>> list = new SpecAlgorithm<String>().specesPlan(Arrays.asList(style),Arrays.asList(color),Arrays.asList(size));
for(List<String> sku : list){//遍历组合
    StringBuilder sb = new StringBuilder();
    for(String str: sku){//拼接组合
        sb.append(str+" " );
    }
    System.out.println(sb.toString());
}

运行结果

在这里插入图片描述

到此 功能就写完了,该算法灵活度高,不论你用什么类型数据作为sku组合 都可不用做任何修改的情况下直接调用。

也可以加QQ群交流技术

最后推荐一个我自己写的MVVM开源项目《Open MVVM》
(想加扣扣讨论群请进入文章结尾查看群号)

有问题请私信,留言,或者发送邮件到我扣扣邮箱 qingingrunt2010

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值