class SetMap extends HashMap<T, Set<V>> {

    public static <T, V> SetMap<T, V> getSetMap( Set<V> values, Function<V, T> keyMapper )
    {
        SetMap<T, V> map = new SetMap<>();

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

            map.putValue( key, value );
        }

        return map;
    }

    public  SetMap();
    public  SetMap( SetMap<T, V> setMap );

}