美文网首页
Guava - 强大的集合工具Multimap

Guava - 强大的集合工具Multimap

作者: 一点温柔 | 来源:发表于2019-11-26 21:37 被阅读0次

一、简介

MultimapsGuava给自身新增的集合类型Multimap提供的特有工具类,它提供了一些常用的、需要单独解释的方法.

二、使用场景

多个key对应相同value的情况

三、常用方法

1、将集合转换为Multimap的方法 - index()

很多情况下,在我们业务的使用中想要将一个集合转换为Multimap类型的数据.

如:需要将一批带有姓名、性别、年龄的用户通过年龄分组放入Multimap中,就可以使用Multimaps.index(Iterable<V> values, Function<? super V, K> keyFunction)方法.

实验代码:

        //定义初始化用户集合信息
        List<TestUserBean> list = Lists.newArrayList();
        for (int i = 1; i < 10; i++) {
            TestUserBean testUserBean = new TestUserBean();
            testUserBean.setName("name" + i);
            testUserBean.setSex("sex" + i);
            testUserBean.setAge(i);
            list.add(testUserBean);
        }

        //测试集合转Multimap方法 - index();
        Multimap<Integer, TestUserBean> testBeanMultimap = Multimaps.index(list, TestUserBean::getAge);
        System.out.println("=================测试集合转Multimap方法====================" + testBeanMultimap);

实验结果:

=================测试集合转Multimap方法===================={1=[{"name":"name1","sex":"sex1","age":1}], 2=[{"name":"name2","sex":"sex2","age":2}], 3=[{"name":"name3","sex":"sex3","age":3}], 4=[{"name":"name4","sex":"sex4","age":4}], 5=[{"name":"name5","sex":"sex5","age":5}], 6=[{"name":"name6","sex":"sex6","age":6}], 7=[{"name":"name7","sex":"sex7","age":7}], 8=[{"name":"name8","sex":"sex8","age":8}], 9=[{"name":"name9","sex":"sex9","age":9}]}

从结果中可以发现最终的生成规则是以age为key,对应的TestUserBean为value中的元素成员.与期望的规则保持一致.

2、将Multimap - (k,v)对调的方法 - invertFrom()

MultiMaps工具类提供了将原有Multimap通过反转其key、value的值通过对调映射的模式,得到一个全新的Multimap对象.

使用场景: 通常我们想以Multimap的value集合作为key搜索条件的时候会使用到它.

实验代码:

        TreeMultimap<Integer, String> testInvertMultimap = TreeMultimap.create();
        testInvertMultimap.putAll(1,Lists.newArrayList("a1","b1","c1"));
        testInvertMultimap.putAll(2,Lists.newArrayList("a2","b1","c2"));

        TreeMultimap<String, Integer> invertFromMultimap = Multimaps.invertFrom(testInvertMultimap, TreeMultimap.create());
        System.out.println("=================测试反转Multimap方法====================" + invertFromMultimap);

实验结果:

=================测试反转Multimap方法===================={a1=[1], a2=[2], b1=[1, 2], c1=[1], c2=[2]}

实验结果与预期保持一致.

3、MapMultimap方法 - forMap()

咱工作中通过Map转换成Multimap也是一个比较常用的方法.Multimaps工具类提供了与之对应的方法 - forMap(Map<K, V> map)

实验代码:

        Map<String,String> map = ImmutableMap.of("k1","v1","k2","v2");

        SetMultimap<String, String> setMultimap = Multimaps.forMap(map);
        setMultimap.put("k1","v1");
        System.out.println("=================测试map转Multimap方法====================" + setMultimap);

实验结果:

=================测试map转Multimap方法===================={k1=[v1], k2=[v2]}

预期与结果保持一致

值得注意的是:forMap()方法返回的SetMultimap是不支持put相关操作的

否则会出现:

Exception in thread "main" java.lang.UnsupportedOperationException

具体原因可以查看源码,是由于返回的时候new了一个MapMultimap导致.

未完待续......

相关文章

网友评论

      本文标题:Guava - 强大的集合工具Multimap

      本文链接:https://www.haomeiwen.com/subject/hqsdwctx.html