blob: aef5d0668049aadc19c38e9a7a23504fd4188d5c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
package org.zwobble.couscous.util;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.function.Predicate;
public class UpToAndIncludingIterable {
public static <T> Iterable<T> upToAndIncluding(Iterable<T> iterable, Predicate<T> predicate) {
return () -> new UpToIterator<>(iterable.iterator(), predicate);
}
private static class UpToIterator<T> implements Iterator<T> {
private final Iterator<T> iterator;
private final Predicate<T> predicate;
private boolean finished;
public UpToIterator(Iterator<T> iterator, Predicate<T> predicate) {
this.iterator = iterator;
this.predicate = predicate;
}
@Override
public boolean hasNext() {
return !finished && iterator.hasNext();
}
@Override
public T next() {
if (hasNext()) {
T value = iterator.next();
finished = predicate.test(value);
return value;
} else {
throw new NoSuchElementException();
}
}
}
}
|