【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())){
		.....
    }       
}

结语

不是职业博主,记录自己遇到的一些奇葩问题及一些知识点,顺便分享给大家,有什么不正确或者疑问,可以留言评论,在看到的第一时间回复,谢谢!
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值