下面为固定格式参数
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());
}