Java 9 Stream新增方法takeWhile的bug
Java 9的Stream新增方法takeWile():允许我们返回Stream里满足条件的前面部分元素。
如:
String[] arr= {"a", "b", "c","d"};
Arrays.stream(arr)
.takeWhile(e -> !e.equalsIgnoreCase("c"))
.forEach(e-> System.out.println(e));
条件为判断字符串和“c”比较,不想等返回true。结果返回a和b,输出:
a
b
bug
但使用flatMap对元素展开返回的元素做takeWhile,返回结果有误:
String[][] ss = {{"a", "b"}, {"c", "d"}};
Stream.of(ss)
.flatMap(Arrays::stream)
.takeWhile(e -> e.equalsIgnoreCase("c"))
.forEachOrdered(System.out::println);
实际输出:
a
b
d
与期待输出的a和b不一致。
这个bug会在JDK 10修复:https://bugs.openjdk.java.net/browse/JDK-8193856