aQute.bnd.stream.TakeWhile Maven / Gradle / Ivy
The newest version!
package aQute.bnd.stream;
import java.util.Spliterator;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
public final class TakeWhile extends AbstractWhile {
public static Stream takeWhile(Stream stream, Predicate super O> predicate) {
return StreamSupport.stream(new TakeWhile<>(stream.spliterator(), predicate), stream.isParallel())
.onClose(stream::close);
}
private boolean take = true;
private TakeWhile(Spliterator spliterator, Predicate super T> predicate) {
super(spliterator, predicate);
}
@Override
public void forEachRemaining(Consumer super T> action) {
if (take) {
while (spliterator.tryAdvance(this) && predicate.test(item)) {
action.accept(item);
}
take = false;
}
}
@Override
public boolean tryAdvance(Consumer super T> action) {
if (take) {
if (spliterator.tryAdvance(this) && predicate.test(item)) {
action.accept(item);
return true;
}
take = false;
}
return false;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy