手上有个需求,需要对历史数据清洗,有一段场景是有N个数组,分别要对每个数组做交叉取一个值,行成笛卡尔积
比如:arr1=[1,2], arr2=[3,4,5]⇒ result = [1,3],[1,4],[1,5],[2,3],[2,4],[2,5]
public static List<List<Integer>> getDynamicCartesianProduct(List<Integer>... arrays) {
List<List<Integer>> result = new ArrayList<>();
if (arrays.length == 0) {
return result;
}
result.add(new ArrayList<>()); // 初始化笛卡尔积的第一个元素
for (List<Integer> array : arrays) {
List<List<Integer>> temp = new ArrayList<>();
for (List<Integer> combination : result) {
for (Integer element : array) {
List<Integer> newCombination = new ArrayList<>(combination);
newCombination.add(element);
temp.add(newCombination);
}
}
result = temp;
}
return result;
}
搞定,使用三次for循环也是没办法;各位是否有其他的好办法,欢迎留言