public class Functional { /** * Consumes (removes) all items while iterating*/ public static <T> Iterable<T> consume(final Iterable<T> iterable) { if (iterable == null) throw new NullPointerException(); return new Iterable<T>() { @Override public Iterator<T> iterator() { final Iterator<T> iterator = iterable.iterator(); return new Iterator<T>() { @Override public boolean hasNext() { return iterator.hasNext(); } @Override public T next() { T result = iterator.next(); iterator.remove(); return result; } @Override public void remove() { throw new NoSuchElementException("already removed"); } }; } }; }
To remove all short texts in a list:
List<String> data = ...; Filter<String> shortText = new Filter<String>() { public boolean accept(String item) { return item == null || item.length() <= 3; } } for(String item: consume(filter(data, shortText))) { System.out.println("By the time you see this, '"+item+"' has been removed."); }
Interesting posts, reminds me of google-collections.
ReplyDelete