Skip to content

Instantly share code, notes, and snippets.

@fupfin
Created June 16, 2015 11:31
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fupfin/c354f8773fbbcc55124e to your computer and use it in GitHub Desktop.
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)
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();
}
}
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