### Question:
SetMap extends HashMap<T, Set<V>> { public Set<V> putValues( T key, Set<V> values ) { Set<V> set = this.get( key ); set = set == null ? new HashSet<>() : set; set.addAll( values ); return super.put( key, set ); } SetMap();  SetMap( SetMap<T, V> setMap ); Set<V> putValue( T key, V value ); Set<V> putValues( T key, Set<V> values ); void putValues( SetMap<T, V> setMap ); static SetMap<T, V> getSetMap( Set<V> values, Function<V, T> keyMapper );  }### Answer:
@Test public void testPutValues() { SetMap<String, Integer> map = new SetMap<>(); map.putValues( "a", Sets.newHashSet( 1, 2, 3 ) ); map.putValues( "a", Sets.newHashSet( 3, 4 ) ); map.putValues( "b", Sets.newHashSet( 5, 6 ) ); assertEquals( Sets.newHashSet( 1, 2, 3, 4 ), map.get( "a" ) ); assertEquals( Sets.newHashSet( 5, 6 ), map.get( "b" ) ); }