我正在尝试执行以下操作:
double[][] ret = new double[res.size()][columnSize];
for(int i = 0; i < res.size(); i++){
ret[i] = res.get(i).toArray(new double[columnSize]);
}
其中res声明为List<List<Double>>
。上面的方法不起作用,因为toArray()方法需要一个参数化数组来推断出结果类型而且不能是原始的......
现在,我可以将我的方法的返回类型更改为Double[][]
,但稍后我会从不同的API中获得期望double[][]
9个原语的其他函数。这意味着会有很多Upcasting,不是吗?
任何解决方案,建议?
答案 0 :(得分:3)
你不能在集合中保留原语,你需要将集合转换为原始类型的数组,如下所示:
double[] toArray(Collection<Double> collection) {
double[] arr = new double[collection.size()];
int i = 0;
for (Double d : collection) {
arr[i++] = d;
}
return arr;
}
答案 1 :(得分:3)
答案 2 :(得分:0)
对于2D阵列。
private static int[][] convertListArray(ArrayList<Integer[]> al) {
int[][] ret = new int[al.size()][];
for (int i=0; i < al.size(); i++) {
Integer[] row = al.get(i);
ret[i] = new int[row.length];
for (int j = 0; j < row.length; j++) {
ret[i][j] = row[j];
}
}
return ret;
}