【问题标题】:How can I get Stream from 3 dimensional array in Java 8?如何从 Java 8 中的 3 维数组中获取 Stream?
【发布时间】:2018-06-10 16:47:52
【问题描述】:

我知道要从二维数组中获取 Stream,但我想知道如何从以下 3 维数组中获取 Stream?

 int[][][] data = {
                    {
                        {1, 2, 3},
                        {4, 5, 6},
                        {7, 8, 9}
                    },
                    {
                        {1, 2, 3},
                        {4, 5, 6},
                        {7, 8, 9}
                    }
                  };

【问题讨论】:

  • 一串什么?如果您知道如何处理 2D 数组,您就不能将解外推到 3D 吗?
  • 我想获得 IntStream。对于 2D 数组解决方案如下:IntStream is = Arrays.stream(data).flatMapToInt(row -> Arrays.stream(row)); 作为 Java 8 的初学者,我无法将解决方案外推到 3D。

标签: arrays java-8 java-stream


【解决方案1】:

如果你可以用二维数组来做,那么为N 维数组做这件事并不难。

解决办法如下:

IntStream result = Arrays.stream(data)
                         .flatMap(Arrays::stream)
                         .flatMapToInt(Arrays::stream);

为了更好地帮助理解上面发生的事情,您可以按如下方式拆分方法调用:

// the call to Arrays.stream yields a Stream<int[][]>
Stream<int[][]> result1 = Arrays.stream(data); 

// the call to flatMap yields a Stream<int[]>
Stream<int[]> result2 = result1.flatMap(Arrays::stream);

  // the call to flatMapToInt yields a IntStream
IntStream intStream = result2.flatMapToInt(Arrays::stream);

【讨论】:

  • 感谢您的解释,@Aominè
【解决方案2】:

您只需再次调用flatMap 即可将流从int[][] 更改为int[] 的流。

IntStream stream = Arrays.stream(data)
                         .flatMap(twoDArray -> Arrays.stream(twoDArray))
                         .flatMapToInt(oneDArray -> Arrays.stream(oneDArray));

【讨论】:

  • 谢谢@YassinHajaj
猜你喜欢
  • 1970-01-01
  • 2018-05-03
  • 1970-01-01
  • 1970-01-01
  • 2020-03-07
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多