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谨慎的光学-当然。知道了。谢谢你的帮助和反馈