package org.quaere.operations; import java.util.List; import java.util.ArrayList; import java.util.LinkedList; import java.util.Arrays; import java.lang.reflect.Array; /** * @author mh14 @ jexp.de * @since 11.11.2007 10:27:05 (c) 2007 jexp.de */ public class CollectionOperations { // Conversion operators public static <T> T[] asArray(T[] tArray, Iterable<T> source) { List<T> asList = new ArrayList<T>(); for (T elm : source) { asList.add(elm); } return asList.toArray(tArray); } @SuppressWarnings({"unchecked"}) public static <T> T[] asArray(Iterable<T> source) { List<T> asList = new LinkedList<T>(); for (T elm : source) { asList.add(elm); } if (asList.isEmpty()) return (T[]) asList.toArray(); final Class<T> type = (Class<T>) asList.get(0).getClass(); final T[] array = (T[]) Array.newInstance(type, asList.size()); return asList.toArray(array); } @SuppressWarnings({"unchecked"}) public static <T> List<T> asList(Iterable<?> iterable) { List<T> asList = new LinkedList<T>(); for (Object elm : iterable) { asList.add((T) elm); // todo convert to type ?? } return asList; } public static <T> Iterable<T> ofClass(Class<T> clazz, Object... source) { return ofClass(clazz, Arrays.asList(source)); } @SuppressWarnings({"unchecked"}) public static <T> Iterable<T> ofClass(Class<T> clazz, Iterable<?> source) { List<T> result = new ArrayList<T>(); for (Object obj : source) { if (obj != null && obj.getClass().equals(clazz)) { result.add((T) obj); } } return result; } // Ordering operators public static <T> Iterable<T> reverse(Iterable<T> sequence) { List<T> reversedList = new LinkedList<T>(); for (T elm : sequence) { reversedList.add(0,elm); } return reversedList; } }