Arc*_*ana 0 java java-8 java-stream
我试图使用lambda表达式实现相同但得到错误
for (String id:ids) {
for (MainGrid ms:grids) {
for (GridRep innerGrid: ms.getInnerGrid()){
if(innerGrid.getId().equals(id)){
finalGrid.add(innerGrid);
break;
}
}
break;
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码在lambda中
for (String id:ids) {
finalGrid.add(grids.stream().flatMap(ms -> ms.getInnerGrid().stream())
.filter(s -> s.getId().equals(id)).findFirst().get());
}
Run Code Online (Sandbox Code Playgroud)
错误:使用传统for()时同样有效,有人可以指导我如何使用lambda实现相同的功能,或者我的代码中是否有一些错过
201-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]与路径的上下文[/ lineManagement]抛出异常[请求处理失败; 嵌套异常是java.util.NoSuchElementException:没有值]带有根本原因java.util.NoSuchElementException: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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |