package org.hivedb.util.functional; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import org.hibernate.shards.util.Lists; public class Collect { public static abstract class Function<R> {public abstract R f();} @SuppressWarnings("unchecked") public static<R> Collection<R> create(Function<R> function, Iterator iterator) { List<R> list = new ArrayList<R>(); for (;iterator.hasNext();iterator.next()) list.add(function.f()); return list; } public static<I,R> Collection<R> amass(Unary<I,R> function, Iterable<I> iterable) { List<R> list = new ArrayList<R>(); Iterator<I> iterator = iterable.iterator(); while(iterator.hasNext()) list.add(function.f(iterator.next())); return list; } public static<T> Pair<Collection<T>,Collection<T>> diff(Collection<T> left, Collection<T> right) { Collection<T> leftOnly = new ArrayList<T>(); Collection<T> rightOnly = new ArrayList<T>(); for(T item : left) if(!right.contains(item)) leftOnly.add(item); for(T item : right) if(!left.contains(item)) rightOnly.add(item); return new Pair<Collection<T>, Collection<T>>(leftOnly,rightOnly); } @SuppressWarnings("unchecked") public static<T> Collection<T> recastCollection(Collection<?> c) { Collection<T> recast = Lists.newArrayList(); for(Object o : c) recast.add((T) o); return recast; } }