Java8 lamda整合兩個集合list為統一集合
阿新 • • 發佈:2020-12-11
技術標籤:javaPageHelperjavamybatis
lamda整合兩個集合list為統一集合
闡述問題
在使用PageHelper分頁工具時,出現統計total異常,或者分頁的其他引數有問題,網上有了不少帖子,要麼查兩次,要麼寫好mybatis對映。當然mybatis對映我一開始就寫好了不起作用。最終還是查兩次資料庫。
程式碼
第一次是在獲取page前就查好想要的,然後再查詢單表,對應一致就好
//3、查詢-PageHelper帶有子集的SQL查詢總數對映有問題
//3-1 獲取全部使用者以及角色
List<SysUser> list1 = sysUserService.getAllUserByConditions(departNames,userName,realName,jobNumber);
PageHelper.startPage(pageNum, pageSize);
List<SysUser> list = sysUserService.getAllUserToPageHelper(departNames,userName,realName,jobNumber);
//3-2 將單表獲取的與帶角色的匹配,在轉移過來
//法一:將list1 中對應的直接全部轉為新list覆蓋原list
list = list.stream ().map(mapper->
list1.stream()
.filter(predicate-> predicate.getUserId() == mapper.getUserId())
.findFirst().orElse(null)
).collect(Collectors.toList());
//法二:將list1 中對應的role集合複製到list的role空集合中
list.forEach(action->{action.setRoles(
list1.stream()
.filter(user-> user.getUserId() == action. getUserId())
.map(user -> user.getRoles()).findFirst().get()
);});
PageInfo<SysUser> pageInfo = new PageInfo<SysUser>(list);
//3-3 總是仍要為全部的,配置後的只顯示當前頁的條數
pageInfo.setTotal(list1.size());
兩種方法,第一種就是講第二個list中的物件全部轉化為第一個list中的資料,第二種是隻將對應的資料賦值到對應的資料中,都可以實現,看你心情。
注:
- PageInfo中的總數依舊有問題,只有當前頁資料的總數,顯然是不對的,還需在單獨修改一下。
總結
- 這樣寫畢竟不是在根源解決,PageHelper沒有去研究,有哪位大神知道的可以交流一下。
- 還有對於lamda的使用還是不是很熟練,總感覺會有更好的方式,畢竟這樣和兩次for迴圈沒啥區別,只是程式碼簡潔一些而已。