开发者社区> 问答> 正文

Java 8 Streams API函数

我是Java 8 Streams API的新手。我正在使用forEach,filter并且注意到下面的代码段都可以修改以产生相同的结果。在这种情况下,两者有何不同?如何决定何时使用哪个?

items.forEach(item -> {
    if (item.contains("B") {
        System.out.println(item);
    }
});
items
    .filter(item -> item.contains("B"))
    .forEach(System.out::println);

问题来源:Stack Overflow

展开
收起
montos 2020-03-22 16:05:29 2113 0
4 条回答
写回答
取消 提交回答
  • 个人对建模比较关注

    底下的语义清晰。没有if和else,只有排序,过滤这种数据操作逻辑。含义清晰。

    2020-03-25 17:21:28
    赞同 展开评论 打赏
  • 两个思路不一样,第一种无论如何先遍历所有,第二种是通过filter去找元素,如果是.filter.findFisrtone 那么第二种遍历可能随时结束

    2020-03-25 10:08:49
    赞同 展开评论 打赏
  • filter将对集合中元素进行过滤,结合lambda表达式,返回一个boolean类型返回值,只有返回为true的Collection中的元素才会进入到forEach的循环中。而foreach则是循环内部进行过滤。

    2020-03-22 16:12:45
    赞同 展开评论 打赏
  • 它们具有相同的效果。

    区别在于,代码调用filter使用流的过滤操作,而forEach带if语句的则使用普通的旧if语句。

    使用哪种代码取决于您要应用的样式,但是功能编程范例(后一段代码的样式)最近变得越来越流行。

    我个人会用

    items
        .filter(item -> item.contains("B"))
        .forEach(System.out::println);
    

    我发现它的可读性更好。

    回答来源:Stack Overflow

    2020-03-22 16:11:09
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载