前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Collectors.toMap()

Collectors.toMap()

作者头像
阿超
发布2022-08-16 16:03:55
7520
发布2022-08-16 16:03:55
举报
文章被收录于专栏:快乐阿超

把两个表内的数据查出来放进一个List,处理对应关系,以前我们的写法是下面这种,用了一个嵌套循环的形式,判断一下userId是否相等,如果相等,则赋值

代码语言:javascript
复制
//查询用户
      List<User> userList = userDao.selectUser();
      //查询用户信息
      List<UserInfo> userInfoList = userInfoDao.selectUserInfo();
      //遍历赋值
      userList = userList.stream().peek(user -> {
          //遍历userInfo
          userInfoList.forEach(userInfo -> {
              //如果user的id和userInfo相等,就赋值
              if (user.getId().equals(userInfo.getUserId())) {
                  user.setUserInfo(userInfo);
              }
          });
      }).collect(Collectors.toList());
      //打印
      userList.forEach(System.out::println);

现在用了toMap,原先嵌套循环的o(n2)的时间复杂度,现在变成了o(n)。只用循环遍历一次,就能达到我们的效果,非常实用~学会的小伙伴赶紧拿去秀操作吧!

代码语言:javascript
复制
//查询用户
      List<User> userList = userDao.selectUser();
      //查询用户信息
      List<UserInfo> userInfoList = userInfoDao.selectUserInfo();
      //转换为map,key为userId,value为userInfo
      Map<String, UserInfo> userInfoMap = userInfoList.stream().collect(Collectors.toMap(UserInfo::getUserId, Function.identity(), (key1, key2) -> key2));
      //批量赋值
      userList = userList.stream().peek(user -> {
          //直接赋值
          user.setUserInfo(userInfoMap.get(user.getId()));
      }).collect(Collectors.toList());
      //打印
      userList.forEach(System.out::println);

打印结果

代码语言:javascript
复制
User{id='123', userInfo=UserInfo{userId='123', age=18}, password='password', userName='张三'}
User{id='123', userInfo=UserInfo{userId='123', age=18}, password='password', userName='张三'}

这里只是简单模拟了一下,实际场景还得根据实际应用哦

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档