把两个表内的数据查出来放进一个List
,处理对应关系,以前我们的写法是下面这种,用了一个嵌套循环的形式,判断一下userId
是否相等,如果相等,则赋值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| List<User> userList = userDao.selectUser(); List<UserInfo> userInfoList = userInfoDao.selectUserInfo(); userList = userList.stream().peek(user -> { userInfoList.forEach(userInfo -> { if (user.getId().equals(userInfo.getUserId())) { user.setUserInfo(userInfo); } }); }).collect(Collectors.toList()); userList.forEach(System.out::println);
|
现在用了toMap
,原先嵌套循环的o(n2)的时间复杂度,现在变成了o(n)。只用循环遍历一次,就能达到我们的效果,非常实用~学会的小伙伴赶紧拿去秀操作吧!
1 2 3 4 5 6 7 8 9 10 11 12 13
| List<User> userList = userDao.selectUser(); List<UserInfo> userInfoList = userInfoDao.selectUserInfo(); 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);
|
打印结果
1 2
| User{id='123', userInfo=UserInfo{userId='123', age=18}, password='password', userName='张三'} User{id='123', userInfo=UserInfo{userId='123', age=18}, password='password', userName='张三'}
|
这里只是简单模拟了一下,实际场景还得根据实际应用哦