1674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen/* 2674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Copyright 2003,2004 The Apache Software Foundation 3674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 4674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Licensed under the Apache License, Version 2.0 (the "License"); 5674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * you may not use this file except in compliance with the License. 6674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * You may obtain a copy of the License at 7674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 8674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * http://www.apache.org/licenses/LICENSE-2.0 9674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 10674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Unless required by applicable law or agreed to in writing, software 11674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * distributed under the License is distributed on an "AS IS" BASIS, 12674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * See the License for the specific language governing permissions and 14674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * limitations under the License. 15674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 16674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenpackage org.mockito.cglib.core; 17674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 18674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenimport java.util.*; 19674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenimport java.lang.reflect.Array; 20674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 21674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen/** 22674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @author Chris Nokleberg 23674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @version $Id: CollectionUtils.java,v 1.7 2004/06/24 21:15:21 herbyderby Exp $ 24674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 25674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenpublic class CollectionUtils { 26674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen private CollectionUtils() { } 27674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 28674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public static Map bucket(Collection c, Transformer t) { 29674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen Map buckets = new HashMap(); 30674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen for (Iterator it = c.iterator(); it.hasNext();) { 31674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen Object value = (Object)it.next(); 32674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen Object key = t.transform(value); 33674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen List bucket = (List)buckets.get(key); 34674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen if (bucket == null) { 35674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen buckets.put(key, bucket = new LinkedList()); 36674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 37674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen bucket.add(value); 38674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 39674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen return buckets; 40674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 41674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 42674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public static void reverse(Map source, Map target) { 43674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen for (Iterator it = source.keySet().iterator(); it.hasNext();) { 44674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen Object key = it.next(); 45674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen target.put(source.get(key), key); 46674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 47674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 48674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 49674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public static Collection filter(Collection c, Predicate p) { 50674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen Iterator it = c.iterator(); 51674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen while (it.hasNext()) { 52674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen if (!p.evaluate(it.next())) { 53674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen it.remove(); 54674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 55674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 56674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen return c; 57674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 58674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 59674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public static List transform(Collection c, Transformer t) { 60674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen List result = new ArrayList(c.size()); 61674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen for (Iterator it = c.iterator(); it.hasNext();) { 62674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen result.add(t.transform(it.next())); 63674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 64674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen return result; 65674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 66674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 67674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public static Map getIndexMap(List list) { 68674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen Map indexes = new HashMap(); 69674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen int index = 0; 70674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen for (Iterator it = list.iterator(); it.hasNext();) { 71674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen indexes.put(it.next(), new Integer(index++)); 72674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 73674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen return indexes; 74674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 75674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen} 76674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 77