开发中实现商品模块时,会遇到商品sku组合问题,有两种解决方案,一种由前端实现sku属性组合然后传递到后台;第二种则由后台实现,这里就来记录一下,如何使用java的for循环实现sku商品属性组合:
public static void getSku(List<List<String>> sourceList){
//获取sourceList集合中的第一组属性集合
List<List<String>> targetList = Arrays.asList(sourceList.get(0));
//从sourceList集合的第二组属性集合开始遍历
for (int i = 1; i < sourceList.size(); i++) {
List<String> nextList = sourceList.get(i);
//遍历第二组属性集合与第一组属性集合组合
//设置一个中间数组来存储属性组合后的数据
List<List<String>> tempList = new ArrayList<>();
for (String nextStr : nextList) {
for (List<String> targetStrList : targetList) {
for (String targetStr : targetStrList) {
//将组合后的属性组合放入临时数组中
tempList.add(Arrays.asList(targetStr+","+nextStr));
}
}
}
System.out.println("第"+i+"次,组合后,temp集合----------------");
for (List<String> tempStr : tempList) {
System.out.println(tempStr);
}
//一组属性组合后,将临时数组中的数据,赋值给targetList,供下次属性组合使用。
targetList = tempList;
}
System.out.println("-------------------最终结果------------------------");
for (List<String> str : targetList) {
System.out.println(str);
}
}
public static void main(String[] args) {
List<List<String>> skuList = new ArrayList<>();
//属性集合:颜色
List<String> list1 = new ArrayList<>();
list1.add("红");
list1.add("黄");
list1.add("蓝");
//属性集合:尺码
List<String> list2 = new ArrayList<>();
list2.add("S");
list2.add("M");
list2.add("L");
//属性集合:款式
List<String> list3 = new ArrayList<>();
list3.add("男");
list3.add("女");
skuList.add(list1);
skuList.add(list2);
skuList.add(list3);
getSku(skuList);
}
实现思路:将上次的属性组合结果存放起来,供下组属性来遍历拼接组合。