java流(替换为循环)

qoefvg9y  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(245)

这个问题在这里已经有答案了

流式和惰性评价(3个答案)
上个月关门了。
我是java新手,正在学习/尝试理解带有流的系统。
在一个示例中,我有以下代码:

private Comment findComment(String author)
{                 
   for(Comments comment : comments) {
        if(comment.getAuthor().equals(author)) {
            return comment;
        }
    }
    return null;
}

出于培训的目的,我开始用流重写一些旧方法(大多数都是for循环),以获得更多的实践。但是这个小方法让我用javadocs(+google)花了三年多的时间,我仍然不知道出了什么问题——它甚至不会编译:/
以下是我的“新”代码,它将取代上述代码:

private Comment findComment(String author)
{
    return comments.stream()
              .filter(s -> author.equals(s.getAuthor()))
              .findFirst();
}

arraylist注解(当时)只能存储来自作者的一条注解。如果一个作者写了一个新的评论,旧的评论就会被删除。这意味着.findfirst();其实没有必要。
在我看来,应该可以缩小arraylist的范围,直到只剩下一个对象,然后将它返回给return语句。。。我是对的还是忘了什么?
编辑(01.12.2020,10:13):我不得不编辑第一个代码片段。返回语句错误(输入错误…)

fkaflof6

fkaflof61#

findFirst 返回一个 Optional . 为了转换这个 OptionalComment 对象,并处理没有 Comment 在你做的时候发现的,你可以用 orElse :

private Comment findComment(String author)
{
    return comments.stream()
              .filter(s -> author.equals(s.getAuthor()))
              .findFirst()
              .orElse(null); // Here
}

相关问题