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

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

從根據 List<String> 過濾的嵌套 HashMap<String, HashMap

從根據 List<String> 過濾的嵌套 HashMap<String, HashMap

慕容708150 2023-09-27 21:24:43
我有一個嵌套的 String HashMap 和一個對象列表。該對象有一個 String 屬性,用于與內部 HashMap 的值進行匹配。stream()我正在嘗試使用Collectors以下 java 代碼找到一個單獨的襯墊HashMap<String, HashMap<String, String>>PartDetailsHMap=new HashMap<String, HashMap<String, String>>()List<Part> partList=new ArrayList<Part>();for(int i=0;i<partList.size();i++)    String partId = partList.get(i).getPropertyValue("part_id");    for(HashMap< String, String> PartPropsHMap:PartDetailsHMap.values())    {        if(PartPropsHMap.containsValue(itemId))        {            collectingPartMap.put(partList.get(i), PartPropsHMap);            break;        }    }}如果需要,我可以提取List<String>.正在尋找一款使用 的單襯管stream()。
查看完整描述

2 回答

?
拉風的咖菲貓

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

像這樣的東西應該有效:


    Map<String, Map<String, String>> PartDetailsHMap = new HashMap<>();

    List<Part> partList = new ArrayList<>();


    Map<Part, Map<String, String>> collectingPartMap = partList.stream()

      .map(part -> PartDetailsHMap.values()

        .stream()

        .filter(partPropsHMap -> partPropsHMap.containsValue(part.getPropertyValue("part_id")))

        .findFirst()

        .map(partPropsHMap -> new SimpleEntry<Part, Map>(part, partPropsHMap))

        .get()

      )

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

我使用了SimpleEntry類來AbstractMap將上下文Part以及我們找到的地圖傳遞給下一個操作 - collect。


警告:我覺得如果沒有流的選項更干凈并且能完成工作,我會選擇它。鑒于這里需要的操作相當復雜,從長遠來看,保持其可讀性比巧妙的做法更有好處。


查看完整回答
反對 回復 2023-09-27
?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

get另一種稍微改進當前答案的方法可能是在沒有檢查的情況下不執行 a isPresent。filter這可以通過使用和來實現map


Map<Part, Map<String, String>> collectingPartMap = partList.stream()

        .map(part -> partDetailsHMap.values().stream()

                .filter(innerMap -> innerMap.containsValue(part.getPartId())) // notice 'getPartId' for the access

                .findFirst()

                .map(firstInnerMap -> new AbstractMap.SimpleEntry<>(part, firstInnerMap)))

        .filter(Optional::isPresent)

        .map(Optional::get)

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


查看完整回答
反對 回復 2023-09-27
  • 2 回答
  • 0 關注
  • 114 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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