hg: lambda/lambda/jdk: 2 new changesets
Remi Forax
forax at univ-mlv.fr
Mon Nov 12 17:04:45 PST 2012
On 11/12/2012 07:25 PM, brian.goetz at oracle.com wrote:
> Changeset: 969458b5ee9d
> Author: briangoetz
> Date: 2012-11-12 12:45 -0500
> URL: http://hg.openjdk.java.net/lambda/lambda/jdk/rev/969458b5ee9d
>
> Garbage-collect dead Iterators methods; move filter/map methods from {Filter,Map}Op to Iterators; add Iterators.asEnumeration
>
> ! src/share/classes/java/util/Iterators.java
> ! src/share/classes/java/util/concurrent/ForkJoinUtils.java
> ! src/share/classes/java/util/streams/ops/FilterOp.java
> ! src/share/classes/java/util/streams/ops/MapOp.java
> - test-ng/tests/org/openjdk/tests/java/util/IteratorsNullTest.java
> ! test-ng/tests/org/openjdk/tests/java/util/streams/ops/FilterOpTest.java
> ! test-ng/tests/org/openjdk/tests/java/util/streams/ops/MapOpTest.java
> ! test-ng/tests/org/openjdk/tests/java/util/streams/ops/TeeOpTest.java
also filterIterator should be written like this
public static<T> Iterator<T> filter(Iterator<? extends T> source, Predicate<? super T> predicate) {
Objects.requireNonNull(source);
Objects.requireNonNull(predicate);
return new Iterator<T>() {
private boolean nextReady;
private T nextValue;
@Override
public boolean hasNext() {
if (nexReady) {
return true;
}
while (source.hasNext()) {
T nextValue = source.next();
if (predicate.test(nextValue)) {
this.nextValue = nextValue;
return nextReady = true;
}
}
return false;
}
@Override
public T next() {
if (nextReady || hasNext()) {
nextReady = false;
T nextValue = this.nextValue;
this.nextValue = null; // avoid reference leak
return nextValue
}
throw new NoSuchElementException();
}
};
}
Rémi
More information about the lambda-dev
mailing list