list转map的几种实用方法
前言
在工作中经常遇到在代码中处理数据的情况,不免会遇到对数据集合之间的转换,下面给大家分享下 list 和 map 之间的转换。在转换下面加了一些自己的建议,请大家酌情使用。
List 转 Map<Integer,List>
这是正常转换,使用用户性别进行分组,着里只是做个实例,正常遇到需要匹配的比如班级等等,值比较多的情况,为了避免不必要的循环,对数据集合进行分组,能够提升效率。
// 使用示例
List<User> userInfos = userService.getAll();
//根据用户性别进行分组
Map<Integer, List<User>> subLineInfoMap = userInfos .stream().collect(Collectors.groupingBy(User::getSex));
List 转 Map<Integer,User>
有时我们需要获取一对一map,比如要根据某个学号去取对应的学生信息,这时候转换为 学号对应的学生的 map 更方便。
// 使用示例
Map<Long, User>userMap = userInfos.stream().collect(Collectors.toMap(User::getStuNum,Function.identity()));
List 转 Map<Integer,String>
我们不需要用户其他信息时,value值只保留其中一个字段的值,这时用下面的
// 使用示例
Map<Integer, String> collect = userInfos.stream().collect(Collectors.toMap(User::geUserNum, User::getUserName));
自己的一些建议
在我们取出数据分组完之后,在匹配处理数据时,为避免数据不存在时走一些没用的逻辑,可以取出 key 做一个是否包含的判断
// 使用示例
List<Data> datas= dataService.getAll();
Map<Integer, String> collect = userInfos.stream().collect(Collectors.toMap(User::geUserNum, User::getUserName));
Set<Integer> userNumSet = collect .keySet();
for (Data data : datas) {
//一些逻辑需要匹配上对应的数据才去做处理时这样去做
if (userNumSet .contains(data .getUserNum())){
.....
}
}
结语
不是职业博主,记录自己遇到的一些奇葩问题及一些知识点,顺便分享给大家,有什么不正确或者疑问,可以留言评论,在看到的第一时间回复,谢谢!