多个对象list,不用for循环求笛卡尔集

在处理业务需求时,需要获取多个维度List(如机构、渠道、产品、口径)的笛卡尔集。传统方法通常使用嵌套for循环,但存在当某个集合为null的问题。为解决此问题,提供了一个工具方法,使用递归算法生成笛卡尔集。该方法首先创建一个空的结果列表,然后通过递归遍历每个维度的List,将结果添加到返回列表中,从而避免了for循环和null检查的问题。
摘要由CSDN通过智能技术生成

业务需求:现在有好多个维度List   机构:List<Dimension> deptList、渠道:List<Dimension> channelList、

                 产品:List<Dimension>  productList、口径:List<Dimension>  specList等维度。

                 Dimension 对象有code,name,type属性。

               

                 现在需要求所有维度的笛卡尔集的对象。

                 一般我们会想到嵌套for循环,但是for循环会有某一个集合为null的问题

 

现在我们写一个工具方法:

  private static <T> List<List<T>> getDescartes(List<List<T>>){

   List<List<T>> returnList = new Arraylist<>();

   descartesRecursive(list,0,retrunList,new Arraylist<T>());

  }    

 

/**

*递归实现

*原理:从原始list的0开始遍历到最后

*originalList 原始list

*position 当前递归在原始list的位置

*returnList 返回结果

* cacheList 临时保存的list

*/     

private static <T> void descartesRecu

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值