我是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
两个思路不一样,第一种无论如何先遍历所有,第二种是通过filter去找元素,如果是.filter.findFisrtone 那么第二种遍历可能随时结束
filter将对集合中元素进行过滤,结合lambda表达式,返回一个boolean类型返回值,只有返回为true的Collection中的元素才会进入到forEach的循环中。而foreach则是循环内部进行过滤。
它们具有相同的效果。
区别在于,代码调用filter使用流的过滤操作,而forEach带if语句的则使用普通的旧if语句。
使用哪种代码取决于您要应用的样式,但是功能编程范例(后一段代码的样式)最近变得越来越流行。
我个人会用
items
.filter(item -> item.contains("B"))
.forEach(System.out::println);
我发现它的可读性更好。
回答来源:Stack Overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。