Advertisement
Guest User

Untitled

a guest
Nov 28th, 2014
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.80 KB | None | 0 0
  1. import java.util.Iterator;
  2.  
  3. /**
  4.  * Created by manykey on 28.11.14.
  5.  */
  6. public class Filter<T> implements Iterable<T> {
  7.  
  8.     public static <T> Iterable<T> by(Predicate<T> predicate, Iterable<T> sequence) {
  9.         return new Filter<>(sequence, predicate);
  10.     }
  11.  
  12.     public interface Predicate<T>{
  13.         public boolean apply(T t);
  14.     }
  15.  
  16.     public Filter(Iterable<T> original, Predicate<T> predicate) {
  17.         this.original = original;
  18.         this.predicate = predicate;
  19.     }
  20.  
  21.     class FilterIterator implements Iterator<T> {
  22.  
  23.         FilterIterator(Iterator<T> originalIterator) {
  24.             this.originalIterator = originalIterator;
  25.             this.item = null;
  26.         }
  27.  
  28.         @Override
  29.         public boolean hasNext() {
  30.             updateIfNeeded();
  31.             return item != null;
  32.         }
  33.  
  34.         @Override
  35.         public T next() {
  36.             updateIfNeeded();
  37.             return extractItem();
  38.         }
  39.  
  40.         @Override
  41.         public void remove() {
  42.             throw new UnsupportedOperationException("FilterIterator.remove");
  43.         }
  44.  
  45.         private T extractItem() {
  46.             T t = item;
  47.             item = null;
  48.             return t;
  49.         }
  50.  
  51.         private void updateIfNeeded() {
  52.             if (item != null) {
  53.                 return;
  54.             }
  55.             while (originalIterator.hasNext()) {
  56.                 T temp = originalIterator.next();
  57.                 if (predicate.apply(temp)) {
  58.                     item = temp;
  59.                     break;
  60.                 }
  61.             }
  62.         }
  63.  
  64.         private T item;
  65.         private Iterator<T> originalIterator;
  66.     }
  67.  
  68.     @Override
  69.     public Iterator<T> iterator() {
  70.         return null;
  71.     }
  72.  
  73.     private Iterable<T> original;
  74.     private Predicate<T> predicate;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement