【发布时间】:2017-05-26 20:54:08
【问题描述】:
在 scala 中,这些方法工作正常,但在 java9 dropWhile 我认为工作方式不同。
这是 takeWhile 的示例
Stream.of("a", "b", "c", "de", "f", "g", "h")
.peek(System.out::println)
.takeWhile(s -> s.length() <= 1)
.collect(Collectors.toList());
输出很好: a, b, c, de, [a, b, c] 它不处理“de”之后的元素,所以它按预期工作
但 dropWhile 的工作方式与我预期的不同:
Stream.of("a", "b", "c", "de", "f", "g", "h")
.peek(s -> System.out.print(s + ", "))
.dropWhile(s -> s.length() <= 1)
.collect(Collectors.toList());
输出是: a, b, c, de, f, g, h, [de, f, g, h]
所以它不会在“de”元素之后停止,它正在处理整个集合。
为什么要处理整个集合?我知道,它需要获取所有元素并将其收集到列表中,但它不应该在“de”元素之后停止处理吗?
【问题讨论】:
标签: java scala functional-programming java-stream java-9