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

nwlls2ji  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(378)

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

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 并在简单检查后返回同一类的对象。第一个函数运行良好,没有任何错误,而第二个函数给我一个 Unexpected return value 尝试返回时出错 thePost .
你能告诉我是什么导致了这个错误,我哪里出错了吗?

xfb7svmp

xfb7svmp1#

问题是使用 return 从lambda表达式内部返回lambda。你的 forEach 期望 Consumer<Post> ,这通常是 void . 可以提供一个lambda,该lambda返回一个预期为void的值(该值只是被忽略),但是您只返回一个匹配的值,然后继续执行 return null 无条件地。
如果要使用lambda,请使用lambda样式:

public Post findById_streams(Long id) {
  return ALL_POSTS.stream()
    .filter(post -> id.equals(post.getId()))
    .findFirst()
    .orElse(null);
}

(还要注意的是,在比较 Long== ; 上面的代码处理这个问题。)

相关问题