1. 程式人生 > 其它 >Java8 lamda整合兩個集合list為統一集合

Java8 lamda整合兩個集合list為統一集合

技術標籤: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中的資料,第二種是隻將對應的資料賦值到對應的資料中,都可以實現,看你心情。
注:

  1. PageInfo中的總數依舊有問題,只有當前頁資料的總數,顯然是不對的,還需在單獨修改一下。

總結

  1. 這樣寫畢竟不是在根源解決,PageHelper沒有去研究,有哪位大神知道的可以交流一下。
  2. 還有對於lamda的使用還是不是很熟練,總感覺會有更好的方式,畢竟這樣和兩次for迴圈沒啥區別,只是程式碼簡潔一些而已。