亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java 8 lambdas 將列表分組到映射中 - 如果每個鍵有多個列表項,則不同的鍵

Java 8 lambdas 將列表分組到映射中 - 如果每個鍵有多個列表項,則不同的鍵

手掌心 2022-12-28 16:23:56
我有一個關系列表。每個關系對象都有三個變量:personA、personB 和 relationshipType。relationshipType 對象有兩個變量:relationship (Son) 和 relationshipPlural (Sons)我有一個要求,我需要列出一個人的關系。如果一個人只有一個妻子,那就是:Wife      <wifeName>如果這個人有一個以上的兒子,那就是:    Sons      <firstSonName>               <secondSonName>是否有一個簡單的 lambda 表達式,我可以在其中將關系列表轉換為map<String,List<relationship>>where 如果鍵具有包含多個項目的列表,則鍵值是 relationshipType.relationshipPlural 值?我能想到的唯一選擇是使用兩個表達式,1)Collectors.toMap()創建一個關系類型的地圖,然后2) 處理地圖以創建另一個地圖,如果地圖的值是具有多個值的列表,則地圖的鍵將為 relationshipType.relationshipPlural。
查看完整描述

1 回答

?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

您可以嘗試使用collectingAndThenwith groupingByas downstream as :


private Map<String, List<RelationShip>> groupAndMapRelationships(List<RelationShip> relationShips) {

   return relationShips.stream()

           .collect(Collectors.collectingAndThen(

                   Collectors.groupingBy(RelationShip::getRelationshipType),

                   map -> map.entrySet().stream()

                           .map(e -> new AbstractMap.SimpleEntry<>(

                                   e.getValue().size() == 1 ?

                                           e.getKey().getRelationship() : e.getKey().getRelationshipPlural(),

                                   e.getValue()))

                           .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))));

}

我考慮過的最小 POJO 看起來像:


@Getter

class RelationShip {

    String personA;

    String personB;

    RelationshipType relationshipType;

}


@Getter

class RelationshipType {

    String relationship;

    String relationshipPlural;

}


查看完整回答
反對 回復 2022-12-28
  • 1 回答
  • 0 關注
  • 93 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號