Comments (8)
I think, it is impossible in Stream API. In rxjava we can compare items in two Observables according to the emit time, but in Stream API there is no time. If two Streams has items, we can take them at any time.
from lightweight-stream-api.
Sorry, linked to the wrong takeUntil method. This is more a variation on takeWhile:
http://reactivex.io/RxJava/javadoc/rx/Observable.html#takeUntil(rx.functions.Func1)
from lightweight-stream-api.
Haven't tested it but I think this would be a working implementation.
public Stream<T> takeUntil(final Predicate<? super T> predicate) {
return new Stream<T>(new LsaExtIterator<T>() {
@Override
protected void nextIteration() {
hasNext = iterator.hasNext() && !(isInit && predicate.test(next));
if(hasNext)
{
next = iterator.next();
}
}
});
}
from lightweight-stream-api.
So as an example:
IntStream.range(0, 10).takeUntil(x -> x > 3)
Would be a stream with 0, 1, 2, 3, 4
from lightweight-stream-api.
@dalewking ok, this possible. Thanks!
from lightweight-stream-api.
Refactored version:
public Stream<T> takeUntil(final Predicate<? super T> predicate) {
return new Stream<T>(new LsaExtIterator<T>() {
@Override
protected void nextIteration() {
hasNext = iterator.hasNext() && !(isInit && predicate.test(next));
next = hasNext ? iterator.next() : null;
}
});
}
Setting next to null is so we don't keep a reference to the last item which we no longer need.
from lightweight-stream-api.
Your fix does not release the reference to the last item emitted when it is no longer needed.
The null part of this:
next = hasNext ? iterator.next() : null;
from lightweight-stream-api.
That's my fault. Thank you so much!
from lightweight-stream-api.
Related Issues (20)
- Make Stream.toList() as ArrayList instead of List HOT 7
- Samples using Stream on Android SDK 21+ HOT 1
- Sorting by date as descending HOT 2
- Add sonarcloud integration HOT 7
- Why does Optional.of(List<String).stream() return a stream with a single element, the List<String> instead of a Stream of individual elements? HOT 2
- Not maintaining the order while groupBy HOT 2
- Add nullability annotations for better Kotlin support HOT 2
- Add teeing collector HOT 1
- 0.0% Coverage on New Code is less than 80.0% HOT 6
- How to get map return HOT 2
- may supply a new method Stream.findFirstOrElse HOT 1
- may supply some method Stream.concat, Stream.append, Stream.prepend HOT 1
- BUG: function not work as java9 standard HOT 1
- ComparatorCompat strange behaviour, possible bug HOT 1
- Make java 11 as a minimum version HOT 6
- v 1.2.2 broke proguard HOT 1
- NoSuchElementException
- NoSuchElementException with generate and anyMatch in v1.2.2 HOT 1
- New mapMulti method.
- Increase code coverage for Compat class HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from lightweight-stream-api.