java 将list 转为map

#将list转为map  【注意:要对list 进行判空】

Map<Integer, User> collect = users.stream().collect(Collectors.toMap(User::getUserId, User -> User);
View Code

#将list转为map并且key去重

Map<Integer, User> collect = users.stream().collect(Collectors.toMap(User::getUserId, User -> User,(oldValue, newValue) -> newValue));
View Code
#Collectors.toMap() 多字段拼接key,并且去重
 3.1:去掉重复key 【(key1, key2) -> key2)】, key 使用多字段拼接。返回 Map<String, UserTalk> userMap1类型数据
     Map<String, UserTalk> userMap1 = userTalkList.stream().collect(Collectors.toMap(userTalk -> userTalk.getSubjectId() + "" + userTalk.getGradeId() +
         "" + userTalk.getUnitId() + "" + userTalk.getLectureType(), UserTalk -> UserTalk, (key1, key2) -> key2));
View Code

 #如果集合list Objects == null,那么需要配合 Optional 对object进行判空

1         Map<String, BigDecimal> collect = Optional.ofNullable(users).orElseGet(() -> {
2             System.out.println("如果是空的,就会执行该处代码,返回一个值");
3             return new ArrayList<>();
4         }).stream().collect(Collectors.toMap(User::getBirthday, User::getAccumulatedAmount));
View Code

#如果value是null,需要使用如下Stream流

1  HashMap<Object, Object> collect1 = objects.stream().collect(HashMap::new, (k, v) -> k.put(v.getRoleName(), v.getSysId()), HashMap::putAll);
2  System.out.println(collect1);
View Code

 #key 重复时,将前面的value 和后面的value拼接起来按照既定的规则

 1         List<User> users = new ArrayList<>();
 2         User user5 = new User();
 3         user5.setUserId(35);
 4         user5.setNum(0);
 5         user5.setUserName("王一博");
 6         user5.setPhone("17319088796");
 7         users.add(user5);
 8 
 9         User user = new User();
10         user.setUserId(1);
11         user.setNum(0);
12         user.setUserName("王二博");
13         user.setPhone("17319088769");
14         users.add(user);
15 
16         User user2 = new User();
17         user2.setUserId(2);
18         user2.setNum(0);
19         user2.setUserName("王三博");
20         user2.setPhone("17319088789");
21         users.add(user2);
22 
23         User user3 = new User();
24         user3.setUserId(3);
25         user3.setNum(0);
26         user3.setUserName("王三博");
27         user3.setPhone("16519088789");
28         users.add(user3);
29 
30         User user4 = new User();
31         user4.setUserId(3);
32         user4.setNum(0);
33         user4.setUserName("王five博");
34         user4.setPhone("16088789");
35         users.add(user4);
36 
37         //当key 和 value 都是 String时
38         Map<String, String> collect = users.stream().collect(Collectors.toMap(User::getUserName, User::getPhone, (key1, key2) -> key1 + "," + key2));
39         //测试结果result: {王二博=17319088769, 王三博=17319088789,16519088789, 王five博=16088789, 王一博=17319088796}
40 
41         //当key 是Integer , value 都是 String时
42         Map<Integer, String> collect1 = users.stream().collect(Collectors.toMap(User::getUserId, User::getPhone, (key1, key2) -> key1 + "," + key2));
43         //测试结果result:{1=17319088769, 2=17319088789, 3=16519088789,16088789, 35=17319088796}
44 
45         //当key 是Integer , value 都是 Integer时getAge[https://stackoverflow.com/questions/55681921/convert-mapinteger-string-to-mapstring-string]
46         Map<String, String> collect3 = users.stream().collect(Collectors.toMap(entry -> String.valueOf(entry.getUserId()), entry -> String.valueOf(entry.getPhone()), (key1, key2) -> key1 + "-" + key2));
47         //测试结果result:{1=17319088769, 2=17319088789, 35=17319088796, 3=16519088789-16088789}
View Code

 #key 重复时,将数据组成集合【组成何种形式的集合任意发挥】

        Map<Integer, List<String>> map = users.stream().collect(Collectors.toMap(User::getUserId,
                p -> {
                    List<String> getPhoneList = new ArrayList<>();
                    getPhoneList.add(p.getPhone());
                    return getPhoneList;
                },

                (List<String> value1, List<String> value2) -> {
                    value1.addAll(value2);
                    return value1;
                }
        ));
        //测试结果result: {1=[17319088769], 2=[17319088789], 3=[16519088789, 16088789], 35=[17319088796]}
View Code

 

 

 

posted on 2021-12-03 11:46  夜空中闪闪发光的星星  阅读(768)  评论(0)    收藏  举报