public static <T> FunctionalIterator<T> create(Iterator<T> delegate) { return new FunctionalIterator<>(delegate); }
@Test public void testTransform() { Assert.assertEquals( Lists.newArrayList( FunctionalIterator.create(Arrays.asList("1", "2", "3").iterator()) .transform( new Function<String, Integer>() { @Override public Integer apply(String input) { return Integer.parseInt(input); } } ) ), Arrays.asList(1, 2, 3) ); }
@Test public void testTransformCat() { Assert.assertEquals( Lists.newArrayList( FunctionalIterator.create(Arrays.asList("1,2", "3,4", "5,6").iterator()) .transformCat( new Function<String, Iterator<String>>() { @Override public Iterator<String> apply(String input) { return Splitter.on(",").split(input).iterator(); } } ) ), Arrays.asList("1", "2", "3", "4", "5", "6") ); }
@Test public void testKeep() { Assert.assertEquals( Lists.newArrayList( FunctionalIterator.create(Arrays.asList("1", "2", "3").iterator()) .keep( new Function<String, Integer>() { @Override public Integer apply(String input) { if ("2".equals(input)) { return null; } return Integer.parseInt(input); } } ) ), Arrays.asList(1, 3) ); }
public <RetType> FunctionalIterator<RetType> transform(Function<T, RetType> fn) { return new FunctionalIterator<>(Iterators.transform(delegate, fn)); }
public FunctionalIterator<T> filter(Predicate<T> pred) { return new FunctionalIterator<>(Iterators.filter(delegate, pred)); }
public <RetType> FunctionalIterator<RetType> transformCat(Function<T, Iterator<RetType>> fn) { return new FunctionalIterator<>(Iterators.concat(Iterators.transform(delegate, fn))); }
public <RetType> FunctionalIterator<RetType> keep(Function<T, RetType> fn) { return new FunctionalIterator<>(Iterators.filter(Iterators.transform(delegate, fn), Predicates.notNull())); }
public FunctionalIterator<T> drop(int numToDrop) { return new FunctionalIterator<>(new DroppingIterator<>(delegate, numToDrop)); }
public static <T> FunctionalIterator<T> create(Iterator<T> delegate) { return new FunctionalIterator<>(delegate); }
public FunctionalIterator<T> filter(Predicate<T> pred) { return new FunctionalIterator<>(Iterators.filter(delegate, pred)); }
public <RetType> FunctionalIterator<RetType> transform(Function<T, RetType> fn) { return new FunctionalIterator<>(Iterators.transform(delegate, fn)); }
public <RetType> FunctionalIterator<RetType> keep(Function<T, RetType> fn) { return new FunctionalIterator<>(Iterators.filter(Iterators.transform(delegate, fn), Predicates.notNull())); }
public <RetType> FunctionalIterator<RetType> transformCat(Function<T, Iterator<RetType>> fn) { return new FunctionalIterator<>(Iterators.concat(Iterators.transform(delegate, fn))); }