| import java.util.*; |
| |
| abstract class TypeTest { |
| |
| interface I {} |
| |
| public Collection<? extends I> excludeFrom(Collection<? extends I> include, Collection<? extends I> exclude) { |
| return copyOf(filter(include, not(in(exclude)))); |
| } |
| |
| interface Predicate<T> { |
| boolean apply(T t); |
| } |
| |
| abstract <T> Predicate<T> in(Collection<? extends T> target); |
| abstract <T> Predicate<T> not(Predicate<T> aPredicate); |
| abstract <E> List<E> copyOf(Iterable<? extends E> elements); |
| |
| abstract <T> Iterable<T> filter(Iterable<T> unfiltered, Predicate<? super T> predicate); |
| } |