服务端根据web端传入的属性生成规格,因为不确定web端传入的属性数据有多少,此处选用递归处理
/**
* 根据属性值生成sku
*
* @param list 属性值列表
* @param index 下标
* @param str 初始化数据
* @param newObjs 新obj
*/
public static List<String> generateSkuCombine(List<List<String>> list, int index, String str, List<String> newObjs) {
if (index == list.size()) {
newObjs.add(str);
return newObjs;
}
for (String dataStr : list.get(index)) {
if (StringUtils.isBlank(str)) {
generateSkuCombine(list, index + 1, str + dataStr, newObjs);
} else {
generateSkuCombine(list, index + 1, str + "," + dataStr, newObjs);
}
}
return newObjs;
}
测试
@Test
public void clothesStyle() {
//模拟T恤的一些属性
List<String> color = Arrays.asList("黑色", "白色");
List<String> style = Arrays.asList("印花", "简约");
List<String> size = Arrays.asList("M", "L", "XXL");
List<List<String>> resultList = new ArrayList<>();
resultList.add(color);
resultList.add(style);
resultList.add(size);
List<String> combine = generateSkuCombine(resultList, 0, "", new ArrayList<>());
for (String sku : combine) {
System.out.println(sku);
}
}
结果
黑色,印花,M
黑色,印花,L
黑色,印花,XXL
黑色,简约,M
黑色,简约,L
黑色,简约,XXL
白色,印花,M
白色,印花,L
白色,印花,XXL
白色,简约,M
白色,简约,L
白色,简约,XXL