public static void main(String[] args) {
// 测试用数组
int[] arr1 = {1, 2};
int[] arr2 = {1, 2, 3};
int[] arr3 = {1, 2, 3, 4};
// 转换成一个数组集合
List<int[]> result = convertToList(arr1, arr2, arr3);
//
for (int[] newArr: result) {
for (int n : newArr) {
System.out.print(n + " ");
}
System.out.println();
}
}
public static List<int[]> convertToList(int[]... arrays) {
List<int[]> list = new ArrayList<int[]>(); //
List<Integer> arrSize = new ArrayList<Integer>();
int count = arrays.length > 0 ?
for (int[] arr : arrays) {
count *= arr.length;
arrSize.add(arr.length);
}
// 根据总次数循环
for (int i = 0; i < count; i++) {
int[] indexs = getIndexs(i, arrSize); // 取得从各数组取数的下标
int[] newArr = new int[arrays.length]; // 新生成的数组
// 根据下标从各数组取数,得到新数组
for (int idx = 0; idx < arrays.length; idx++) {
newArr[idx] = arrays[idx][indexs[idx]];
}
list.add(newArr); // 保存到集合
}
return list;
}
// 取得下标,原理其实就和拆分数值一样,只不过不是十进制的,而是每位的进制都和该位置数组长度一致
public static int[] getIndexs(int index, List<Integer> arrSize) {
int[] indexs = new int[arrSize.size()]; // 用来保存下标
// 从最后一位开始取得下标,想像一下拆分十进制数的每一位就能明白了
for (int i = arrSize.size() - 1; i >= 0; i--) {
indexs[i] = index % arrSize.get(i);
index = index / arrSize.get(i);
}
return indexs;
}
// 测试用数组
int[] arr1 = {1, 2};
int[] arr2 = {1, 2, 3};
int[] arr3 = {1, 2, 3, 4};
// 转换成一个数组集合
List<int[]> result = convertToList(arr1, arr2, arr3);
//
for (int[] newArr: result) {
for (int n : newArr) {
System.out.print(n + " ");
}
System.out.println();
}
}
public static List<int[]> convertToList(int[]... arrays) {
List<int[]> list = new ArrayList<int[]>(); //
List<Integer> arrSize = new ArrayList<Integer>();
int count = arrays.length > 0 ?
for (int[] arr : arrays) {
count *= arr.length;
arrSize.add(arr.length);
}
// 根据总次数循环
for (int i = 0; i < count; i++) {
int[] indexs = getIndexs(i, arrSize); // 取得从各数组取数的下标
int[] newArr = new int[arrays.length]; // 新生成的数组
// 根据下标从各数组取数,得到新数组
for (int idx = 0; idx < arrays.length; idx++) {
newArr[idx] = arrays[idx][indexs[idx]];
}
list.add(newArr); // 保存到集合
}
return list;
}
// 取得下标,原理其实就和拆分数值一样,只不过不是十进制的,而是每位的进制都和该位置数组长度一致
public static int[] getIndexs(int index, List<Integer> arrSize) {
int[] indexs = new int[arrSize.size()]; // 用来保存下标
// 从最后一位开始取得下标,想像一下拆分十进制数的每一位就能明白了
for (int i = arrSize.size() - 1; i >= 0; i--) {
indexs[i] = index % arrSize.get(i);
index = index / arrSize.get(i);
}
return indexs;
}