商品规格递归拼接

创建实体类

@Data
public class Shopping {

    private String name;

    private List<String> children;
}

测试

 public static void main(String[] args) {

  ArrayList<Shopping> shoppings = new ArrayList<>();

  Shopping shopping = new Shopping();
  shopping.setName("内存");
  ArrayList<String> strings = new ArrayList<>();
  strings.add("12G");
  strings.add("16G");
  shopping.setChildren(strings);

  Shopping shopping1 = new Shopping();
  shopping1.setName("存储");
  ArrayList<String> strings1 = new ArrayList<>();
  strings1.add("256G");
  strings1.add("512G");
  shopping1.setChildren(strings1);

  Shopping shopping2 = new Shopping();
  shopping2.setName("颜色");
  ArrayList<String> strings2 = new ArrayList<>();
  strings2.add("黑色");
  strings2.add("白色");
  shopping2.setChildren(strings2);

  shoppings.add(shopping);
  shoppings.add(shopping1);
  shoppings.add(shopping2);

  List<List<String>> combinations = generateCombinations(shoppings);
  for (List<String> combination : combinations) {
   System.out.println(combination);
  }

 }

 public static List<List<String>> generateCombinations(List<Shopping> shoppings) {
  List<List<String>> result = new ArrayList<>();
  generateCombinationsRecursive(shoppings, 0, new ArrayList<>(), result);
  return result;
 }

 private static void generateCombinationsRecursive(List<Shopping> shoppings, int index, List<String> current, List<List<String>> result) {
  if (index == shoppings.size()) {
   result.add(new ArrayList<>(current));
   return;
  }

  Shopping shopping = shoppings.get(index);
  for (String option : shopping.getChildren()) {
   current.add(shopping.getName() + ": " + option);
   generateCombinationsRecursive(shoppings, index + 1, current, result);
   current.remove(current.size() - 1);
  }
 }

效果

相关推荐
zhxueverme9 分钟前
java面试八股文学习笔记
java·学习·面试
.生产的驴20 分钟前
Dcoker Redis哨兵模式集群介绍与搭建 故障转移 分布式 Java客户端连接
java·大数据·数据库·redis·分布式·mysql·缓存
爱喝coffee的人1 小时前
关于SpringBoot中AOP的深入理解
java·开发语言·spring boot·后端·学习·spring
知识分享小能手1 小时前
Java学习教程,从入门到精通,Java ConcurrentHashMap语法知识点及案例代码(63)
java·大数据·开发语言·学习·intellij-idea·后端开发·java开发
流水随清风1 小时前
IDEA 使用 Gradle 强制清除缓存,更新快照
java·ide·gradle·intellij-idea
yava_free2 小时前
springcloud eureka原理和机制
java·spring·spring cloud·eureka
xlsw_2 小时前
java全栈day18--Web后端实战(java操作数据库2)
java·开发语言
张声录12 小时前
【ETCD】【Linearizable Read OR Serializable Read】ETCD 数据读取:强一致性 vs 高性能,选择最适合的读取模式
java·数据库·etcd
lzz的编码时刻2 小时前
Spring Boot 声明式事务
java·spring boot·后端