2 回答
TA贡献1946条经验 获得超3个赞
您可能正在寻找以下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);这相当于(只是为了澄清)
String valueToMatch = "1";String s = list.stream() .flatMap(a -> a.getCustomer().getIdList().stream()) .anyMatch(b -> b.getValue().equals(valueToMatch)) ? valueToMatch : null;
TA贡献1856条经验 获得超11个赞
更新 2此解决方案直接适用于 Person 对象列表:
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();
使用地图的旧答案由于您只对地图的值感兴趣,因此您应该对它们进行流式传输,而在 flatMap 中,我不仅在getId()列表中获得了流,而且还直接对其进行了过滤。因此,如果我正确理解了您的代码结构,这应该可以
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();
更新以调整已编辑的问题
添加回答
举报
