Guava之Maps、Multimaps、BiMap

Maps

public class MapsExampleTest
{

    @Test
    public void testCreate()
    {
        ArrayList valueList = Lists.newArrayList("1", "2", "3");
        ImmutableMap map = Maps.uniqueIndex(valueList, v -> v + "_key");
        System.out.println(map);
        Map map2 = Maps.asMap(Sets.newHashSet("1", "2", "3"), k -> k + "_value");
        System.out.println(map2);
    }

    @Test
    public void testTransform()
    {
        Map map = Maps.asMap(Sets.newHashSet("1", "2", "3"), k -> k + "_value");
        Map newMap = Maps.transformValues(map, v -> v + "_transform");
        System.out.println(newMap);
        assertThat(newMap.containsValue("1_value_transform"), is(true));
    }

    @Test
    public void testFilter()
    {
        Map map = Maps.asMap(Sets.newHashSet("1", "2", "3"), k -> k + "_value");
        Map newMap = Maps.filterKeys(map, k -> Lists.newArrayList("1", "2").contains(k));
        assertThat(newMap.containsKey("3"), is(false));
    }
}

Multimaps

public class MultimapsExampleTest
{

    @Test
    public void testBasic()
    {
        LinkedListMultimap multipleMap = LinkedListMultimap.create();
        HashMap hashMap = Maps.newHashMap();
        hashMap.put("1", "1");
        hashMap.put("1", "2");
        assertThat(hashMap.size(), equalTo(1));


        multipleMap.put("1", "1");
        multipleMap.put("1", "2");
        assertThat(multipleMap.size(), equalTo(2));
        System.out.println(multipleMap.get("1"));
    }
}

BiMap
BiMap的作用很清晰:它是一个一一映射,可以通过key得到value,也可以通过value得到key
BiMap要求key和value都唯一,如果key不唯一则覆盖key,如果value不唯一则直接报错。

public class BiMapExampleTest
{

    @Test
    public void testCreateAndPut()
    {
        HashBiMap biMap = HashBiMap.create();
        biMap.put("1", "2");
        biMap.put("1", "3");
        assertThat(biMap.containsKey("1"), is(true));
        assertThat(biMap.size(), equalTo(1));

        try
        {
            biMap.put("2", "3");
            fail();
        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    @Test
    public void testBiMapInverse()
    {
        HashBiMap biMap = HashBiMap.create();
        biMap.put("1", "2");
        biMap.put("2", "3");
        biMap.put("3", "4");

        assertThat(biMap.containsKey("1"), is(true));
        assertThat(biMap.containsKey("2"), is(true));
        assertThat(biMap.containsKey("3"), is(true));
        assertThat(biMap.size(), equalTo(3));

        BiMap inverseKey = biMap.inverse();
        assertThat(inverseKey.containsKey("2"), is(true));
        assertThat(inverseKey.containsKey("3"), is(true));
        assertThat(inverseKey.containsKey("4"), is(true));
        assertThat(inverseKey.size(), equalTo(3));
    }

    @Test
    public void testCreateAndForcePut()
    {
        HashBiMap biMap = HashBiMap.create();
        biMap.put("1", "2");
        assertThat(biMap.containsKey("1"), is(true));
        biMap.forcePut("2", "2");
        assertThat(biMap.containsKey("1"), is(false));
        assertThat(biMap.containsKey("2"), is(true));
    }
}

你可能感兴趣的:(Guava之Maps、Multimaps、BiMap)