1e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/* 2e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Copyright (c) 2007 Mockito contributors 3e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * This program is made available under the terms of the MIT License. 4e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 5e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpackage org.mockito.internal.util.collections; 7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.util.Collection; 9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.util.LinkedList; 10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 112637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin/** 122637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin * Basic list/collection operators. 132637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin * We know that there are existing libraries that implement those use cases neatly. 142637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin * However, we want to keep Mockito dependencies minimal. 152637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin * In Java8 we should be able to get rid of this class. 162637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin */ 17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpublic class ListUtil { 18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public static <T> LinkedList<T> filter(Collection<T> collection, Filter<T> filter) { 20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson LinkedList<T> filtered = new LinkedList<T>(); 21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson for (T t : collection) { 22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson if (!filter.isOut(t)) { 23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson filtered.add(t); 24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return filtered; 27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 282637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 292637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin public static <From, To> LinkedList<To> convert(Collection<From> collection, Converter<From, To> converter) { 302637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin LinkedList<To> converted = new LinkedList<To>(); 312637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin for (From f: collection) { 322637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin converted.add(converter.convert(f)); 332637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 342637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin return converted; 352637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 362637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 37e03a0f42b85425bffd40bcf790819671a7848c1aPaul Duffin public interface Filter<T> { 38e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson boolean isOut(T object); 39e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 402637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 412637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin public interface Converter<From, To> { 422637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin To convert(From from); 432637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 44e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson} 45