takeWhile()与Flatmap的工作方式不同
我正在用takeWhile创建片段,以探索其可能性。当与flatMap结合使用时,其行为与预期不符。请在下面找到代码片段。 String[][] strArray = {{"Sample1", "Sample2"}, {"Sample3", "Sample4", "Sample5"}}; Arrays.stream(strArray) .flatMap(indStream -> Arrays.stream(indStream)) .takeWhile(ele -> !ele.equalsIgnoreCase("Sample4")) .forEach(ele -> System.out.println(ele)); 实际输出: Sample1 Sample2 Sample3 Sample5 预期输出: Sample1 Sample2 Sample3 期望的原因是takeWhile应该一直执行到内部条件变为真为止。我还在平面图中添加了打印输出语句以进行调试。流仅返回两次,这与期望一致。 但是,这在链中没有平面图的情况下也很好用。 String[] strArraySingle = {"Sample3", "Sample4", "Sample5"}; Arrays.stream(strArraySingle) .takeWhile(ele -> !ele.equalsIgnoreCase("Sample4")) .forEach(ele -> System.out.println(ele)); 实际输出: Sample3 此处,实际输出与预期输出匹配。 免责声明:这些摘录仅用于代码实践,不能用于任何有效的用例。 更新: 错误JDK-8193856:该修补程序将作为JDK 10的一部分提供。更改将更正whileOps …