MultiMap

聊骚

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

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

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

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

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

maven jar


    com.google.guava
    guava
    26.0-jre

代码实例

private List 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 multiMap = ArrayListMultimap.create();
    for (User u : list) {
        multiMap.put(u.getName(), u);
    }

    for (Map.Entry> entry : multiMap.asMap().entrySet()){
        System.out.println(entry.getKey());
    }
}

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

    for (Map.Entry> entry : userMap.entrySet()){
        System.out.println(entry.getKey());
    }

}

你可能感兴趣的:(MultiMap)