package de.fuberlin.projecta.utils; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.ListIterator; import java.util.Set; /** * Python-like list comprehension for Java * * @see http://stackoverflow.com/questions/899138/python-like-list-comprehension-in-java */ public class ListComprehension { public interface Func<In, Out> { public Out apply(In in); } public static <T> void applyToListInPlace(List<T> list, Func<T, T> f) { ListIterator<T> itr = list.listIterator(); while (itr.hasNext()) { T output = f.apply(itr.next()); itr.set(output); } } public static <In, Out> List<Out> map(List<In> in, Func<In, Out> f) { List<Out> out = new ArrayList<Out>(in.size()); for (In inObj : in) { out.add(f.apply(inObj)); } return out; } public static <In, Out> Set<Out> map(Set<In> in, Func<In, Out> f) { Set<Out> out = new LinkedHashSet<Out>(in.size()); for (In inObj : in) { out.add(f.apply(inObj)); } return out; } }