package org.limewire.collection; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; public class CollectionUtils { private CollectionUtils() {} public static <T> List<T> listOf(Iterator<T> iterator) { List<T> list = new ArrayList<T>(); while(iterator.hasNext()) { list.add(iterator.next()); } return list; } public static <T> List<T> listOf(Iterable<T> iterable) { List<T> list = new ArrayList<T>(); for(T t : iterable) { list.add(t); } return list; } /** * Converts the given Collection to a Set (if it isn't * already a Set). */ public static <T> Set<T> toSet(Collection<T> c) { if (c instanceof Set) { return (Set<T>)c; } return new LinkedHashSet<T>(c); } /** * Converts the given Collection to a List (if it isn't * already a List). */ public static <T> List<T> toList(Collection<T> c) { if (c instanceof List) { return (List<T>)c; } return new ArrayList<T>(c); } public static <T> Iterator<T> readOnlyIterator(final Iterator<T> iterator) { return new Iterator<T>() { @Override public boolean hasNext() { return iterator.hasNext(); } @Override public T next() { return iterator.next(); } @Override public void remove() { throw new UnsupportedOperationException("read only iterator"); } }; } /** * Flattens the collections into a single collection. * The returned value is a copy, not a view. */ public static <T> Collection<T> flatten(Collection<? extends Collection<? extends T>> values) { List<T> list = new ArrayList<T>(); for(Collection<? extends T> collection : values) { list.addAll(collection); } return list; } }