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

如何实现三个集合的笛卡尔积?附相关Java代码片段

实现三个列表的笛卡尔积(Java Stream方式)

我来帮你补全这段生成三个列表笛卡尔积的代码,顺便把逻辑讲清楚:

首先是完整的实现代码:

XList<T> combine() { 
    XList<T> returnList = new XList<>(); 
    List<T> list = new ArrayList<>(this.coll); 
    List<T> a = (List<T>) list.get(0); 
    List<T> b = (List<T>) list.get(1); 
    List<T> c = (List<T>) list.get(2); 

    // 生成三个列表的笛卡尔积
    List<XList<T>> cartesianProduct = a.stream()
        .flatMap(ai -> b.stream()
            .flatMap(bi -> c.stream()
                .map(ci -> new XList<>(Arrays.asList(ai, bi, ci)))))
        .collect(Collectors.toList());

    // 将结果批量添加到返回列表中(假设XList支持addAll方法)
    returnList.addAll(cartesianProduct);
    return returnList;
}

代码逻辑说明:

  • 核心是用**嵌套的Stream操作(flatMap+map)**实现笛卡尔积:
    1. 第一层遍历列表a的每个元素ai
    2. 第二层通过flatMap遍历列表b的每个元素bi,把ai和bi的组合传递到下一层
    3. 第三层遍历列表c的每个元素ci,将三个元素打包成你需要的XList对象
  • 最后用Collectors.toList()收集所有组合结果,再批量添加到returnList中

注意:这段代码默认this.coll的前三个元素都是List<T>类型,且XList可以通过Arrays.asList(ai, bi, ci)来初始化。如果XList有更直接的构造方式,也可以替换掉new XList<>(Arrays.asList(...))这部分。


内容的提问来源于stack exchange,提问作者Grzegorz Konar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:42:09