如何使用 lambda 将嵌套数组转换为嵌套列表?

don*_* jy 1 java arrays java-8

更新Integer[][]用作 src 数组类型可以使以下代码工作。


我想转换int[][]List<List<Integer>>并尝试使用:

int[][] arr = new int[][]{{2}, {3, 4}, {6, 5, 7}, {4, 1, 8, 3}};
List<List<Integer>> ll = Arrays.stream(arr)
        .map(Arrays::asList) //  I expect this produces Stream<List<Integer>> but it was actually a Stream<List<int[]>>.
        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

编译器发出错误:

|  Error:
|  incompatible types: inference variable T has incompatible bounds
|      equality constraints: java.util.List<java.lang.Integer>
|      lower bounds: java.util.List<int[]>
|          List<List<Integer>> ll = Arrays.stream(arr).map(Arrays::asList).collect(Collectors.toList());
|                                   ^-----------------------------------------------------------------^
Run Code Online (Sandbox Code Playgroud)

And*_*ner 5

Arrays.asList不与原语工作(至少,不是你想的方式:Arrays.asList(new int[n])List<int[]>一个元素,而不是List<Integer>n元素)。

相反,映射到一个IntStream(给你一个IntStream),装箱元素(给你一个Stream<Integer>),然后收集到一个列表(给你一个List<Integer>

List<List<Integer>> ll = Arrays.stream(arr)
    .map(a -> IntStream.of(a).boxed().collect(toList()))
    .collect(toList());
Run Code Online (Sandbox Code Playgroud)

请注意,如果您使用的是番石榴,则可以使用Ints.asList

List<List<Integer>> ll = Arrays.stream(arr)
    .map(Ints::asList)
    .collect(toList());
Run Code Online (Sandbox Code Playgroud)

其他库也可能有int[] -> List<Integer>方法;这只是我知道存在的一种。