2 回答

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊
像這樣的東西應(yīng)該有效:
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類來(lái)AbstractMap將上下文Part以及我們找到的地圖傳遞給下一個(gè)操作 - collect。
警告:我覺(jué)得如果沒(méi)有流的選項(xiàng)更干凈并且能完成工作,我會(huì)選擇它。鑒于這里需要的操作相當(dāng)復(fù)雜,從長(zhǎng)遠(yuǎn)來(lái)看,保持其可讀性比巧妙的做法更有好處。

TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊
get另一種稍微改進(jìn)當(dāng)前答案的方法可能是在沒(méi)有檢查的情況下不執(zhí)行 a isPresent。filter這可以通過(guò)使用和來(lái)實(shí)現(xiàn)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));
添加回答
舉報(bào)