2 回答

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個(gè)贊
您可能正在尋找以下map
操作:
String s = list.stream() .flatMap(a -> a.getCustomer().getIdList().stream()) .filter(b -> b.getValue().equals("1")) .findFirst() .map(Id::getValue) // map to the value of filtered Id .orElse(null);
這相當(dāng)于(只是為了澄清)
String valueToMatch = "1";String s = list.stream() .flatMap(a -> a.getCustomer().getIdList().stream()) .anyMatch(b -> b.getValue().equals(valueToMatch)) ? valueToMatch : null;

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊
更新 2此解決方案直接適用于 Person 對(duì)象列表:
String key = "1";
List<Person> list = container.get("A");
String filteredValue = list.stream()
.flatMap(person -> Arrays.stream(person.getCustomer().getId())
.filter(id -> id.getValue().equals(key)))
.findFirst().get().getValue();
使用地圖的舊答案由于您只對(duì)地圖的值感興趣,因此您應(yīng)該對(duì)它們進(jìn)行流式傳輸,而在 flatMap 中,我不僅在getId()列表中獲得了流,而且還直接對(duì)其進(jìn)行了過(guò)濾。因此,如果我正確理解了您的代碼結(jié)構(gòu),這應(yīng)該可以
String key = "1";
String filteredValue = map.values().stream()
.flatMap(list -> list.stream()
.flatMap(person -> Arrays.stream(person.getCustomer().getId())
.filter(id -> id.getValue().equals("1"))))
.findFirst().get().getValue();
更新以調(diào)整已編輯的問(wèn)題
添加回答
舉報(bào)