gpt4 book ai didi

java - java 8 中的 Lambda 嵌套集出错

转载 作者:行者123 更新时间:2023-12-01 07:18:42 28 4
gpt4 key购买 nike

我试图使用 lambda 表达式实现相同的目标,但出现错误

for (String id:ids) {
for (MainGrid ms:grids) {
for (GridRep innerGrid: ms.getInnerGrid()){
if(innerGrid.getId().equals(id)){
finalGrid.add(innerGrid);
break;
}
}
break;
}
}

上面的lambda代码

for (String id:ids) {
finalGrid.add(grids.stream().flatMap(ms -> ms.getInnerGrid().stream())
.filter(s -> s.getId().equals(id)).findFirst().get());
}

错误:使用传统的 for() 时效果相同,有人可以指导我如何使用 lambda 实现相同的效果,或者如果我的代码中有一些遗漏

31-Jan-2018 11:38:29.221 SEVERE [http-apr-9910-exec-8] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [Spring MVC Dispatcher Servlet] in context with path [/lineManagement] threw exception [Request processing failed; nested exception is java.util.NoSuchElementException: No value present] with root cause java.util.NoSuchElementException: No value present at java.util.Optional.get(Optional.java:135)

最佳答案

如果流为空,

Stream.findFirst() 返回一个空可选值,在这种情况下调用 get() 会导致异常。最简单的解决方案是使用 ifPresent() 代替:

grids.stream()
.flatMap(ms -> ms.getInnerGrid().stream())
.filter(s -> s.getId().equals(id))
.findFirst()
.ifPresent(finalGrid::add);

关于java - java 8 中的 Lambda 嵌套集出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48535577/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com