如何在同一个java流上组合takewhile和dropwhile?
我想使用或实现scala的span方法。
到目前为止,我有以下代码,但作为练习,我尝试尽可能使用流):
Iterator<T> iter = ...
// takeWhile(pred).forEach(foo)
while (iter.hasNext()) {
T elem = iter.next();
if (!pred(elem)) {
break;
}
foo(elem);
}
// dropWhile(pred).forEach(bar)
iter.forEachRemaining(elem -> bar(elem));
1条答案
按热度按时间w8f9ii691#
你不能使用
takeWhile
以及dropWhile
在一个Stream
,因为Stream
只有一个用途,但你可以在Iterable
,因为您可以从一个Iterable
.根据您的需要,您可以执行所示逻辑尝试执行的操作,即根据条件第一次为真的时间执行两个操作之一。可以为此编写助手方法:
然后你会像这样用在
Stream
:那会叫
foo()
对于每个元素pred()
返回true,然后调用bar()
在所有剩余的元素上。请注意
span
需要有序处理,从而破坏了并行处理的流优势。