public interface Transformer<I, O> { public O transform(I item); } public class Functional { /** * Transforms Iterable<I> into Iterable<O> using a Transformer<I, O> */ public static <I, O> Iterable<O> transform(final Iterable<I> iterable, final Transformer<I, O> transformer) { if (iterable == null) throw new NullPointerException(); if (transformer == null) throw new NullPointerException(); return new Iterable<O>() { @Override public Iterator<O> iterator() { final Iterator<I> iterator = iterable.iterator(); return new Iterator<O>() { @Override public boolean hasNext() { return iterator.hasNext(); } @Override public O next() { return transformer.transform(iterator.next()); } @Override public void remove() { iterator.remove(); } }; } }; } }
Example:
Transformer<String, Integer> textToNumber = new Transformer<String, Integer>()
{
public Integer transform(String text)
{
return Integer.valueOf(text);
}
};
Iterable<String> data = ...;
for(Integer number: transform(data, textToNumber))
{
System.out.println("number: "+number.intValue());
}
No comments:
Post a Comment