Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java 8中Lambda嵌套集出错_Java_Java 8_Java Stream - Fatal编程技术网

java 8中Lambda嵌套集出错

java 8中Lambda嵌套集出错,java,java-8,java-stream,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;

我试图用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实现相同的方法,或者如果我的代码中有一些遗漏

2018年1月31日11:38:29.221严重[http-apr-9910-exec-8] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() 对于具有路径的上下文中的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);

我认为,如果在任何时候都找不到元素,您的代码将失败。你能试试这个吗

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

当然,请正确设置可选的类型。

您实际使用的是LambdaJ库吗?或者只是Java 8的内置lambdas?Java 8内置lambda
grids.stream().flatMap(mainGrid->mainGrid.getInnerGrid().stream()).filter(gridRep->ids.contains(gridRep.getId()).collect(Collectors.toList())为什么您的外环无条件断开?谢谢!是的,当元素为空时,这就是问题所在。两种解决方案都有效。我必须承认,我更喜欢shmosel的答案,因为他解释了可选选项,并且使用了ifPresent。不客气。如果这解决了你的问题,请。