001package com.box.sdk.internal.utils;
002
003import java.util.Collection;
004import java.util.LinkedList;
005import java.util.List;
006
007/**
008 * {@link Collection} related utlities.
009 */
010public class CollectionUtils {
011
012    /**
013     * Only static members.
014     */
015    protected CollectionUtils() {
016    }
017
018    /**
019     * Re-maps a provided collection.
020     *
021     * @param <T_Result>
022     *            type of result
023     * @param <T_Source>
024     *            type of source
025     * @param source
026     *            for mapping
027     * @param mapper
028     *            element mapper
029     * @return mapped source
030     */
031    public static <T_Result, T_Source> List<T_Result> map(Collection<T_Source> source,
032            Mapper<T_Result, T_Source> mapper) {
033        List<T_Result> result = new LinkedList<T_Result>();
034        for (T_Source element : source) {
035            result.add(mapper.map(element));
036        }
037        return result;
038    }
039
040    /**
041     * Contract for {@link Collection}-s mapping.
042     *
043     * @param <T_Result>
044     *            type of result
045     * @param <T_Source>
046     *            type of source
047     */
048    public interface Mapper<T_Result, T_Source> {
049
050        /**
051         * Maps a provided value.
052         *
053         * @param input
054         *            for mapping
055         * @return mapped value
056         */
057        T_Result map(T_Source input);
058
059    }
060
061}