如何使用Streams将2D数组转换为2D列表?

时间:2017-06-04 19:23:29

标签: java multidimensional-array java-stream

我已尝试this StackOverflow回答代码,但收到错误Cannot infer type argument(s) for <R> map(Function<? super T,? extends R>)

//data is int[][]
Arrays.stream(data)
    .map(i -> Arrays.stream(i)
        .collect(Collectors.toList()))
            .collect(Collectors.toList());

2 个答案:

答案 0 :(得分:6)

Arrays.stream将遍历int[]中的每个int[][]。 您可以将int[]转换为IntStream。 然后,为了将int s的流转换为List<Integer>, 你首先要把它们装箱。 一旦装箱到Integer,您就可以将它们收集到列表中。 最后将List<Integer>的流收集到列表中。

List<List<Integer>> list = Arrays.stream(data)
    .map(row -> IntStream.of(row).boxed().collect(Collectors.toList()))
    .collect(Collectors.toList());

Demo.

答案 1 :(得分:0)

尝试StreamEx

StreamEx.of(data).map(a -> IntStreamEx.of(a).boxed().toList()).toList();

AbacusUtil,简单而有效:

Stream.of(data).map(a -> IntList.of(a).boxed()).toList();

// Or:
Seq.of(data).map(a -> IntList.of(a).boxed());

所有这些都是无效安全。如果data为空

,则返回空列表