将 List<List<Integer>> 转换为 int[][]

Zer*_*ero 1 java arrays integer multidimensional-array

我正在编写一种方法,它将Integer数据类型从 a Listof Lists 转换为原始数组数组 type int[][]

有没有办法转换Integerint使用Java API?

供您参考,int[] set将用于其他目的,所以请忽略。

我发现了什么

Apache Commons API“toPrimitive”方法将整数转换为整数类型。但是,我只是在寻找使用本机 java API 的解决方案。

到目前为止,这是我的代码

class Test {
    int[][] convert(int[] set) {
        List<List<Integer>> ll = new ArrayList<List<Integer>>();
        ll.add(new ArrayList<Integer>());
        ll.add(new ArrayList<Integer>());
        ll.add(new ArrayList<Integer>());
        ll.get(0).add(1);
        ll.get(0).add(2);
        ll.get(1).add(2);
        ll.get(2).add(3);

        System.out.println(ll + " " + ll.size());

        int[][] tempArray = new int[0][0];
        for (int i = 0; i < ll.size(); i++) {
            for (int j = 0; j < ll.get(i).size(); j++) {
                tempArray[i][j] = ll.get(j);
            }
        }
        return tempArray;
    }
}
Run Code Online (Sandbox Code Playgroud)

预期成绩

List entry: [[1,2],[2],[3]]
return: {{1,2},{2},{3}}
Run Code Online (Sandbox Code Playgroud)

错误

tempArray[i][j] = ll.get(j);

返回java.util.List<java.lang.Integer> cannot be converted to int

4ca*_*tle 8

要回答您的确切问题,是的 anInteger可以int使用intValue()方法转换为,或者您可以使用自动装箱转换为int.

因此,循环的最里面部分可能是以下任一部分:

tempArray[i][j] = ll.get(i).get(j).intValue();
tempArray[i][j] = ll.get(i).get(j);
Run Code Online (Sandbox Code Playgroud)

但是,我们也可以采取不同的策略。

作为对类似问题的此答案的修改,在 Java 8 中,您可以使用 Streams 映射到整数数组。这种结构只需要一个额外的映射层。

List<List<Integer>> list = new ArrayList<>();

int[][] arr = list.stream()
    .map(l -> l.stream().mapToInt(Integer::intValue).toArray())
    .toArray(int[][]::new);
Run Code Online (Sandbox Code Playgroud)

Ideone 演示