Java toArray()方法:原始结果类型

时间:2012-03-31 19:58:59

标签: java arrays generics

我正在尝试执行以下操作:

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,不是吗?

任何解决方案,建议?

3 个答案:

答案 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;
}