You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:33:16