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)
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>方法;这只是我知道存在的一种。
| 归档时间: |
|
| 查看次数: |
105 次 |
| 最近记录: |