java8新特性--Stream將List轉為Map匯總


Stream將List轉換為Map,使用Collectors.toMap方法進行轉換

背景:User類,類中分別有id,name,age三個屬性。List集合,userList,存儲User對象

1、指定key-value,value是對象中的某個屬性值

 Map<Integer,String> userMap1 = userList.stream().collect(Collectors.toMap(User::getId,User::getName));

2、指定key-value,value是對象本身,User->User 是一個返回本身的lambda表達式

Map<Integer,User> userMap2 = userList.stream().collect(Collectors.toMap(User::getId,User->User));

3、指定key-value,value是對象本身,Function.identity()是簡潔寫法,也是返回對象本身

 Map<Integer,User> userMap3 = userList.stream().collect(Collectors.toMap(User::getId, Function.identity()));

4、指定key-value,value是對象本身,Function.identity()是簡潔寫法,也是返回對象本身,key 沖突的解決辦法,這里選擇第二個key覆蓋第一個key

 Map<Integer,User> userMap4 = userList.stream().collect(Collectors.toMap(User::getId, Function.identity(),(key1,key2)->key2));

 

實際項目中的例子:

T_CONTACTOR表結構主要有:

 

 T_FUNDCONTACTRELA表結構主要有:

業務如下:首先有一張產品跟聯系人關聯關系表和一張聯系人表,當我在界面新增一個聯系人數據時,數據進入的是T_CONTACTOR表,如果需要給該聯系人綁定產品,則加一條數據進入T_FUNDCONTACTRELA產品聯系人關聯關系表,在關聯關系表的主要有CONTACTOR_ID這個字段綁定關系。那么下面我在頁面根據產品ID為條件查詢出所有跟該產品綁定了關聯關系的聯系人(主鍵是CONTACTOR_ID),然后在界面上想要展示的是這個產品下的聯系人的詳細信息。那么代碼實現(因為項目因為,使用單表查詢然后在使用java去匹配,更快捷的方式當然是使用兩個表聯合查詢)做法可以有如下:

// 首先第一步就是從產品聯系人關聯關系表根據前端界面傳遞的產品ID查詢出綁定了該產品下的所有聯系人
List<FundContRela> fundContRelaList = fundContRelaAtom.getFundContRela(fundContRela);
        if (CollectionUtils.isNotEmpty(fundContRelaList)) {
            // 第二步就是從聯系人表查詢出所有聯系人
            List<ContactorInfoInputDTO> contactorListDTOList = getContactorList(fundContactorListDTO);
            // 查詢的聯系人信息不能為空
            if (CollectionUtils.isNotEmpty(contactorListDTOList)) {
// 將list集合轉化成Map<聯系人主鍵ID, 聯系人對象>這種格式
                Map<String, ContactorInfoInputDTO> contactorListDTOMap = contactorListDTOList.stream().
collect(Collectors.toMap(ContactorInfoInputDTO::getContactorId, Function.identity())); //3、遍歷關系集合,匹配聯系人 fundContRelaList.forEach(v -> { FundContactorListDTO target = new FundContactorListDTO(); BeanUtils.copyProperties(v, target); // contactorListDTOMap.get(v.getContactorId()) != null 判斷作用就是為了過濾出存在產品聯系人關聯關系表根據產品ID查詢出來的集合fundContRelaList 范圍內的聯系人 if (null != contactorListDTOMap && null != contactorListDTOMap.get(v.getContactorId())) { ContactorInfoInputDTO source = contactorListDTOMap.get(v.getContactorId()); BeanUtils.copyProperties(source, target); } out.add(target); }); } }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM