Java 返回相同返回类型的对象会导致语法错误

Java 返回相同返回类型的对象会导致语法错误,java,lambda,Java,Lambda,我有两个功能。具体如下: public Post findById(Long id){ for (Post thePost : ALL_POSTS) { if(thePost.getId()==id){ return thePost; } } return null; } public Post findById_Two(Long id) { ALL_POSTS.forEach((thePost) -&g

我有两个功能。具体如下:

public Post findById(Long id){
    for (Post thePost : ALL_POSTS) {
        if(thePost.getId()==id){
            return thePost;
        }
    }
    return null;
}


public Post findById_Two(Long id) {
    ALL_POSTS.forEach((thePost) -> {
        if(thePost.getId()==id){
            System.out.println(thePost.getId()==id);
            return thePost;
        }
    });
    return null;
}
如您所见,这两个函数的返回类型均为类Post,并在简单检查后返回同一类的对象。第一个函数工作正常,没有任何错误,而第二个函数在尝试返回Post时给了我一个意外的返回值错误

您能告诉我是什么导致了这个错误,我哪里出错了吗?

问题是使用lambda表达式内部的return返回lambda。您的forEach需要一个消费者,这通常是无效的。可以提供一个lambda,它确实返回一个值,其中void是预期值,该值只是被忽略,但是您只返回一个匹配的值,然后无条件地返回null

如果要使用lambda,请使用lambda样式:

公共Post findById_streamsLong id{ 返回所有_POSTS.stream .filterpost->id.equalPost.getId findFirst先生 .orElsenull; } 还要注意,在比较Long by==时存在一个错误;上面的代码处理了这个问题。

问题是在lambda表达式中使用return从lambda返回。您的forEach需要一个消费者,这通常是无效的。可以提供一个lambda,它确实返回一个值,其中void是预期值,该值只是被忽略,但是您只返回一个匹配的值,然后无条件地返回null

如果要使用lambda,请使用lambda样式:

公共Post findById_streamsLong id{ 返回所有_POSTS.stream .filterpost->id.equalPost.getId findFirst先生 .orElsenull; }
还要注意,在比较Long by==时存在一个错误;上面的代码可以处理这个问题。

注意:学习如何具体地传达消息。您不应该得到语法错误;语法正确。这个错误是在编译过程的后期出现的。@chrylis谨慎的光学-当然。知道了。感谢您的帮助和反馈注:学习如何具体地传达信息。您不应该得到语法错误;语法正确。这个错误是在编译过程的后期出现的。@chrylis谨慎的光学-当然。知道了。谢谢你的帮助和反馈