java 将list 转为map
#将list转为map 【注意:要对list 进行判空】
Map<Integer, User> collect = users.stream().collect(Collectors.toMap(User::getUserId, User -> User);
#将list转为map并且key去重
Map<Integer, User> collect = users.stream().collect(Collectors.toMap(User::getUserId, User -> User,(oldValue, newValue) -> newValue));
#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));
#如果集合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));
#如果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);
#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}
#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]}
posted on 2021-12-03 11:46 夜空中闪闪发光的星星 阅读(768) 评论(0) 收藏 举报
浙公网安备 33010602011771号