@Test public void filterRetains() { Iterator<String> it = filter(Arrays.asList("waffles", "poo", "pancakes", "eggs").iterator(), new Filter<String>() { @Override public boolean apply(String breakfast) { return "pancakes".equals(breakfast); } }); assertThat(it).containsExactly("pancakes"); }
public static <T> Iterator<T> filter(final Iterator<T> unfiltered, final Filter<? super T> filter) { checkNotNull(unfiltered, "unfiltered"); checkNotNull(filter, "filter"); return new PeekingIterator<T>() { protected T computeNext() { while (unfiltered.hasNext()) { T element = unfiltered.next(); if (filter.apply(element)) { return element; } } return endOfData(); } }; }
Util { public static <T> Iterator<T> filter(final Iterator<T> unfiltered, final Filter<? super T> filter) { checkNotNull(unfiltered, "unfiltered"); checkNotNull(filter, "filter"); return new PeekingIterator<T>() { protected T computeNext() { while (unfiltered.hasNext()) { T element = unfiltered.next(); if (filter.apply(element)) { return element; } } return endOfData(); } }; } }
Util { public static <T> Iterator<T> filter(final Iterator<T> unfiltered, final Filter<? super T> filter) { checkNotNull(unfiltered, "unfiltered"); checkNotNull(filter, "filter"); return new PeekingIterator<T>() { protected T computeNext() { while (unfiltered.hasNext()) { T element = unfiltered.next(); if (filter.apply(element)) { return element; } } return endOfData(); } }; } private  Util(); }
Util { public static <T> Iterator<T> filter(final Iterator<T> unfiltered, final Filter<? super T> filter) { checkNotNull(unfiltered, "unfiltered"); checkNotNull(filter, "filter"); return new PeekingIterator<T>() { protected T computeNext() { while (unfiltered.hasNext()) { T element = unfiltered.next(); if (filter.apply(element)) { return element; } } return endOfData(); } }; } private  Util(); static boolean equal(Object a, Object b); static String slurp(Reader reader); static String join(char delim, Object... parts); static List<String> split(char delim, String toSplit); static T nextOrNull(Iterator<T> it); static Iterator<T> singletonIterator(final T nullableValue); static PeekingIterator<T> peekingIterator(final Iterator<T> iterator); static Iterator<T> concat(final Iterator<T> first, final Iterator<T> second); static Iterator<T> concat(final Iterable<? extends Iterable<? extends T>> i); static Iterator<T> filter(final Iterator<T> unfiltered,
                                       final Filter<? super T> filter); static Filter<T> and(final Filter<T> first, final Filter<? super T> second); static String flatten(Map<String, Object> input); static Map<String, Object> toMap(String type, String rdata); static Map<String, Object> toMap(String type, List<String> parts); }
Util { public static <T> Iterator<T> filter(final Iterator<T> unfiltered, final Filter<? super T> filter) { checkNotNull(unfiltered, "unfiltered"); checkNotNull(filter, "filter"); return new PeekingIterator<T>() { protected T computeNext() { while (unfiltered.hasNext()) { T element = unfiltered.next(); if (filter.apply(element)) { return element; } } return endOfData(); } }; } private  Util(); static boolean equal(Object a, Object b); static String slurp(Reader reader); static String join(char delim, Object... parts); static List<String> split(char delim, String toSplit); static T nextOrNull(Iterator<T> it); static Iterator<T> singletonIterator(final T nullableValue); static PeekingIterator<T> peekingIterator(final Iterator<T> iterator); static Iterator<T> concat(final Iterator<T> first, final Iterator<T> second); static Iterator<T> concat(final Iterable<? extends Iterable<? extends T>> i); static Iterator<T> filter(final Iterator<T> unfiltered,
                                       final Filter<? super T> filter); static Filter<T> and(final Filter<T> first, final Filter<? super T> second); static String flatten(Map<String, Object> input); static Map<String, Object> toMap(String type, String rdata); static Map<String, Object> toMap(String type, List<String> parts);  }