class ListMap extends HashMap<T, List<V>> {

    public static <T, V> ListMap<T, V> getListMap( List<V> values, Function<V, T> keyMapper )
    {
        ListMap<T, V> map = new ListMap<>();

        for ( V value : values )
        {
            T key = keyMapper.apply( value );

            map.putValue( key, value );
        }

        return map;
    }

    public  ListMap();
    public  ListMap( ListMap<T, V> listMap );

}