标签:排列 JAVA listData list List add 集合 position returnList
package com.lagou.controller;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @descriptions:
* @author: FUQIANG.ZHOU
* @date: 2022/6/28 23:14
* @version: 1.0
*/
public class AirticketTest {
public static void main(String[] args) {
String[] seatType ={"A1","A2","E"};
String[] rangeType ={"D","N"};
String[] seasonType ={"P","N","L"};
String[] discountType ={"N","D","J","S"};
List<List<String>> listData = new ArrayList<>();
listData.add(Arrays.asList(seatType));
listData.add(Arrays.asList(rangeType));
listData.add(Arrays.asList(seasonType));
listData.add(Arrays.asList(discountType));
List<List<String>> lisReturn = getDescartes(listData);
//System.out.println(lisReturn);
for( List<String> item : lisReturn)
{
System.out.println(item);
}
}
private static <T> List<List<T>> getDescartes(List<List<T>> list) {
List<List<T>> returnList = new ArrayList<>();
descartesRecursive(list, 0, returnList, new ArrayList<>());
return returnList;
}
/**
* 递归实现
* 原理:从原始list的0开始依次遍历到最后
*
* @param originalList 原始list
* @param position 当前递归在原始list的position
* @param returnList 返回结果
* @param cacheList 临时保存的list
*/
private static <T> void descartesRecursive(List<List<T>> originalList, int position, List<List<T>> returnList, List<T> cacheList) {
List<T> originalItemList = originalList.get(position);
for (int i = 0; i < originalItemList.size(); i++) {
//最后一个复用cacheList,节省内存
List<T> childCacheList = (i == originalItemList.size() - 1) ? cacheList : new ArrayList<>(cacheList);
childCacheList.add(originalItemList.get(i));
if (position == originalList.size() - 1) {//遍历到最后退出递归
returnList.add(childCacheList);
continue;
}
descartesRecursive(originalList, position + 1, returnList, childCacheList);
}
}
}
标签:排列,JAVA,listData,list,List,add,集合,position,returnList 来源: https://www.cnblogs.com/fuqiang-zhou/p/16421657.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。