多個物件list,不用for迴圈求笛卡爾集

2021-10-23 19:23:56 字數 1159 閱讀 9199

業務需求:現在有好多個維度list   機構:listdeptlist、渠道:listchannellist、

產品:listproductlist、口徑:listspeclist等維度。

dimension 物件有code,name,type屬性。

現在需要求所有維度的笛卡爾集的物件。

一般我們會想到巢狀for迴圈,但是for迴圈會有某乙個集合為null的問題

現在我們寫乙個工具方法:

private static list> getdescartes(list>){

list> returnlist = new arraylist<>();

descartesrecursive(list,0,retrunlist,new arraylist());

*遞迴實現

*原理:從原始list的0開始遍歷到最後

*originallist 原始list

*position 當前遞迴在原始list的位置

*returnlist 返回結果

* cachelist 臨時儲存的list

private static void descartesrecursive(list> originallist ,int position,list> returnlist ,listcachelist ){

listoriginalttemlist = originallist .get(position);

for(int i =0;i < originalttemlist .size();i++){

//最後乙個復用cachelist,節省記憶體

listchildcachelist = (i == originalttemlist .size() -1)?cachelist :new arraylist<>(cachelist );

childcachelist .add(originalttemlist .get(i));

if(position ==originallist .size()-1){ //遍歷到最後退出遞迴

returnlist .add(childcachelist );

continue;

descartesrecursive(originallist ,position+1,returnlist ,childcachelist );

合併多個List

public class listutil catch exception e for int i 0,len lists.length i len i return list 測試方法 public class listutiltest system.out.println list 2018 1...

java8 多個list物件用lambda求差集

業務場景 呼叫同步介面獲取當前全部有效賬戶,資料庫已存在部分賬戶資訊,因此需要篩選同步介面中已存在本地的帳戶。呼叫介面獲取的資料集合 listlist response.getdata getitems 本地查詢出來的賬戶集合 listtowlist accountrepository.findal...

python 不用迴圈列印1 1000

題目 螢幕上列印1 1000這1000個數,不許使用迴圈語句 條件語句,不許使用?算符。不許在源 中用列舉輸出語句的辦法傻打,比如一千個print語句不行,不再贅述其他傻打行為,大家都能領會精神。解答 newline n numbers map lambda x str x range 1,1000...