Created
June 16, 2015 11:31
-
-
Save fupfin/c354f8773fbbcc55124e to your computer and use it in GitHub Desktop.
Simple map builder for java using Tuple class I've made before (https://gist.github.com/fupfin/2299564)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package fupfin; | |
import static fupfin.Tuples.*; | |
import java.util.*; | |
import java.util.concurrent.ConcurrentHashMap; | |
public class MapBuilder<K, V> { | |
private Map<K, V> map = new ConcurrentHashMap<K, V>(); | |
@SafeVarargs | |
public MapBuilder(Tuple2<K, V>... keyValues) { | |
for(Tuple2<K, V> keyValue: keyValues) | |
put(keyValue); | |
} | |
public MapBuilder<K, V> put(Tuple2<K, V> keyValue) | |
{ | |
return put(keyValue.v1, keyValue.v2); | |
} | |
public MapBuilder<K, V> put(K key, V value) | |
{ | |
this.map.put(key, value); | |
return this; | |
} | |
public Map<K, V> build() | |
{ | |
return map; | |
} | |
@SafeVarargs | |
public static <K, V> MapBuilder<K, V> builder(Tuple2<K, V>... keyValues) | |
{ | |
return new MapBuilder<K, V>(keyValues); | |
} | |
@SafeVarargs | |
public static <K, V> Map<K, V> map(Tuple2<K, V>... keyValues) | |
{ | |
return builder(keyValues).build(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package fupfin; | |
import static org.junit.Assert.*; | |
import static fupfin.MapBuilder.*; | |
import static fupfin.Tuples.*; | |
import java.util.Map; | |
import org.junit.Test; | |
public class MapBuilderTest { | |
private final String KEY1 = "k1"; | |
private final String KEY2 = "k2"; | |
private final String VALUE1 = "v1"; | |
private final String VALUE2 = "v2"; | |
@Test | |
public void initialBuilderBuildEmptyMap() | |
{ | |
Map<String, String> map = MapBuilder.<String, String>builder().build(); | |
assertEquals(0, map.size()); | |
} | |
@Test | |
public void couldBuildNormalMapWithConstructor() | |
{ | |
Map<String, String> map = builder(tuple(KEY1, VALUE1)).build(); | |
assertEquals(1, map.size()); | |
assertSame(VALUE1, map.get(KEY1)); | |
map = builder(tuple(KEY1, VALUE1), tuple(KEY2, VALUE2)).build(); | |
assertEquals(2, map.size()); | |
assertSame(VALUE2, map.get(KEY2)); | |
} | |
@Test | |
public void coudBuildMapUsingSetterWithTuple() | |
{ | |
MapBuilder<String, String> builder = MapBuilder.<String, String>builder(); | |
builder.put(tuple(KEY1, VALUE1)); | |
Map<String, String> map = builder.build(); | |
assertEquals(1, map.size()); | |
assertSame(VALUE1, map.get(KEY1)); | |
map = builder.put(tuple(KEY2, VALUE2)).build(); | |
assertEquals(2, map.size()); | |
assertSame(VALUE2, map.get(KEY2)); | |
} | |
@Test | |
public void couldBuildMapUsingSetterWithKeyAndValue() | |
{ | |
MapBuilder<String, String> builder = MapBuilder.<String, String>builder(); | |
builder.put(KEY1, VALUE1); | |
Map<String, String> map = builder.build(); | |
assertEquals(1, map.size()); | |
assertSame(VALUE1, map.get(KEY1)); | |
map = builder.put(KEY2, VALUE2).build(); | |
assertEquals(2, map.size()); | |
assertSame(VALUE2, map.get(KEY2)); | |
} | |
@Test | |
public void couldBuildMapAtOnceWithSingleStaticMethod() | |
{ | |
Map<String, String> map = map(tuple(KEY1, VALUE1)); | |
assertEquals(1, map.size()); | |
assertSame(VALUE1, map.get(KEY1)); | |
map = map(tuple(KEY1, VALUE1), tuple(KEY2, VALUE2)); | |
assertEquals(2, map.size()); | |
assertSame(VALUE2, map.get(KEY2)); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment