MultiMap

聊骚

相信大家都碰到过这样的场景

需要将一个列表根据列表中的实体的某个字段进行分类。

比较典型的场景就是我们查询多对多的结果。
那么我们一般的方法就是:

  • 创建Map,key为对应字段,value为对应列表;
  • 遍历列表,根据实体字段去map获取对应列表,再将数据放到对应列表。

逻辑比较简单,但是还是要一定的代码行数的。
有没有一种简单的方法?guava的MultiMap就是

maven jar

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>26.0-jre</version>
</dependency>

代码实例

private List<User> list = new ArrayList<>();

@Before
public void init(){
    User user = new User();
    user.setId(1L);
    user.setName("张三");
    user.setAge(23);
    list.add(user);

    user = new User();
    user.setId(2L);
    user.setName("李四");
    user.setAge(22);
    list.add(user);

    user = new User();
    user.setId(3L);
    user.setName("张三");
    user.setAge(25);
    list.add(user);
}

@Test
public void testMultiMap() {
    Multimap<String, User> multiMap = ArrayListMultimap.create();
    for (User u : list) {
        multiMap.put(u.getName(), u);
    }

    for (Map.Entry<String, Collection<User>> entry : multiMap.asMap().entrySet()){
        System.out.println(entry.getKey());
    }
}

@Test
public void testListToMap(){
    Map<String, List<User>> userMap = new HashMap<>();
    for (User u : list){
        if (userMap.containsKey(u.getName())){
            userMap.get(u.getName()).add(u);
        }else {
            List<User> users = new ArrayList<>();
            users.add(u);
            userMap.put(u.getName(), users);
        }
    }

    for (Map.Entry<String, List<User>> entry : userMap.entrySet()){
        System.out.println(entry.getKey());
    }

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,308评论 19 139
  • 在日常开发中我们通常有需要对 List 容器进行分组的情况,比如对下面的list数据根据name字段来进行分组: ...
    山虎hz阅读 8,354评论 0 0
  • George Orwell. 《1984》DAY 13/20 B3C1 这一章主要讲Winston被抓之后被关进牢...
    Jenner大江阅读 1,644评论 0 0
  • 我遇到了一个人。我有点喜欢他。 可是他并不喜欢我。 也许是因为我们认识的方式不太对。或许还有别的原因。 我想更多的...
    团子不是兔子阅读 891评论 0 1
  • 一天,偶然在朋友圈里看到一个熟悉的同事的名字赫然出现在一篇悼念他人的文章后面。 急忙打电话问,“是我写的,她是我原...
    果枚阅读 2,924评论 1 9