基于Main类与XList<T>实现n个列表笛卡尔积的技术咨询
完善后的笛卡尔积实现代码及说明
我帮你完善了XList
完整XList泛型类实现
import java.util.ArrayList; import java.util.List; public class XList<T> { // 静态方法,计算多个列表的笛卡尔积 public static <T> List<List<T>> computeCombinationsOriginal(List<List<T>> inputLists) { // 结果列表,初始包含一个空组合 List<List<T>> result = new ArrayList<>(); if (inputLists.isEmpty()) { return result; } // 初始化结果为第一个列表的每个元素单独成组合 for (T item : inputLists.get(0)) { List<T> initialCombination = new ArrayList<>(); initialCombination.add(item); result.add(initialCombination); } // 遍历剩下的每个列表,逐步扩展组合 for (int i = 1; i < inputLists.size(); i++) { List<T> currentList = inputLists.get(i); List<List<T>> tempResult = new ArrayList<>(); // 将现有每个组合与当前列表的每个元素拼接 for (List<T> existingCombination : result) { for (T item : currentList) { List<T> newCombination = new ArrayList<>(existingCombination); newCombination.add(item); tempResult.add(newCombination); } } // 更新结果为新的组合集合 result = tempResult; } return result; } }
可运行的Main类代码
import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { List<String> list12 = Arrays.asList("a", "b"); List<String> list22 = Arrays.asList("X", "Y", "Z"); List<String> list32 = Arrays.asList("1", "2"); // 调用笛卡尔积计算方法 List<List<String>> cres = XList.computeCombinationsOriginal(Arrays.asList(list12, list22, list32)); // 打印结果 System.out.println(cres); } }
代码关键点说明
- 迭代式构建逻辑:先以第一个列表的元素初始化基础组合,再依次将后续每个列表的元素与现有组合拼接,逐步生成完整的笛卡尔积,逻辑直观易维护。
- 全类型兼容:通过泛型
<T>支持任意类型的列表元素,不管是字符串、数字还是自定义对象都能处理。 - 边界情况防护:如果传入的输入列表集合为空,直接返回空结果;如果某个子列表为空,最终结果也会是空(因为无法生成有效组合),避免运行时异常。
运行结果
执行Main类后,控制台会输出所有预期的笛卡尔积组合:
[[a, X, 1], [a, X, 2], [a, Y, 1], [a, Y, 2], [a, Z, 1], [a, Z, 2], [b, X, 1], [b, X, 2], [b, Y, 1], [b, Y, 2], [b, Z, 1], [b, Z, 2]]
内容的提问来源于stack exchange,提问作者Grzegorz Wawrzeniecki
相关产品推荐
相关产品推荐

