Java的逻辑小业务根据指定的map对应属性和指定字符串数据转变为全新的map

下面为固定格式参数

        String inputProperties = "20000:imobile;20000:型号;20000:reno6-刀锋金属壳;231100582:简约;28102:OPPO;28102:OPPO型号;28102:reno6;12060095:深圳市古石木商贸有限公司";
        Map<String, String> propNameMap = new HashMap<>();//生产环境中这个数据是会通过API赋值进去的
        propNameMap.put("20000", "品牌");
        propNameMap.put("231100582", "流行元素");
        propNameMap.put("28102", "适用手机机型");
        propNameMap.put("12060095", "生产企业");

下面为生成全新格式的要求图片
在这里插入图片描述
测试环境业务代码
如果有大佬有更好的方案,希望大佬可以指点一二,目前我是这样实现的

    @Test
    public void test() {
        String inputProperties = "20000:imobile;20000:型号;20000:reno6-刀锋金属壳;231100582:简约;28102:OPPO;28102:OPPO型号;28102:reno6;12060095:深圳市古石木商贸有限公司";
        Map<String, String> propNameMap = new HashMap<>();//生产环境中这个数据是会通过API赋值进去的
        propNameMap.put("20000", "品牌");
        propNameMap.put("231100582", "流行元素");
        propNameMap.put("28102", "适用手机机型");
        propNameMap.put("12060095", "生产企业");
        //map的key为属性名map的value为对应属性,例如:key=品牌 value=其它
        Map<String, String> propValueMap = new HashMap<>();
        //供应商产品的属性集合,格式例如
        ArrayList<String> propertyList = Lists.newArrayList(inputProperties.split(";"));
        //开始循环将标准属性值设置到map中
        for (String properties : propertyList) {
            String[] pidVal = properties.split(":");
            String pid = pidVal[0], val = pidVal[1];
            String pName = propNameMap.get(pid);
            if (propValueMap.containsKey(pid)) {//propValueMap中正常数据是属性名和属性值,如果是pid则表示是需要设置的子属性
                //重新覆盖属性值,如果以下方数据28102为例子,没有被覆盖的pName=OPPO,覆盖后为pName=OPPO型号
                pName = propValueMap.get(pid);
                propValueMap.remove(pid);
            } else if (propValueMap.containsKey(pName)) {//如果被包含了则可能是子属性,例如品牌下的型号
                //这里存的是pid和属性名,主要是用来兼容 28102:OPPO;28102:OPPO型号;28102:reno6 这种格式的数据
                propValueMap.put(pid, val);
            }
            propValueMap.put(pName, val);
        }
        System.out.println("propValueMap = " + propValueMap.toString());
    }
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Acmen-zym

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值