Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Iterator;
- /**
- * Created by manykey on 28.11.14.
- */
- public class Filter<T> implements Iterable<T> {
- public static <T> Iterable<T> by(Predicate<T> predicate, Iterable<T> sequence) {
- return new Filter<>(sequence, predicate);
- }
- public interface Predicate<T>{
- public boolean apply(T t);
- }
- public Filter(Iterable<T> original, Predicate<T> predicate) {
- this.original = original;
- this.predicate = predicate;
- }
- class FilterIterator implements Iterator<T> {
- FilterIterator(Iterator<T> originalIterator) {
- this.originalIterator = originalIterator;
- this.item = null;
- }
- @Override
- public boolean hasNext() {
- updateIfNeeded();
- return item != null;
- }
- @Override
- public T next() {
- updateIfNeeded();
- return extractItem();
- }
- @Override
- public void remove() {
- throw new UnsupportedOperationException("FilterIterator.remove");
- }
- private T extractItem() {
- T t = item;
- item = null;
- return t;
- }
- private void updateIfNeeded() {
- if (item != null) {
- return;
- }
- while (originalIterator.hasNext()) {
- T temp = originalIterator.next();
- if (predicate.apply(temp)) {
- item = temp;
- break;
- }
- }
- }
- private T item;
- private Iterator<T> originalIterator;
- }
- @Override
- public Iterator<T> iterator() {
- return null;
- }
- private Iterable<T> original;
- private Predicate<T> predicate;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement