使用Collection时,有没有理由在forEach调用之前专门插入流/并行流?
示例:
Collection<Object> foo;
foo.forEach(); // Goes through every item in foo
foo.stream().forEach(); // Does stream make a difference here
foo.parallelStream().forEach(); // Does this make a difference here?
由于
答案 0 :(得分:4)
foo.forEach(); // Goes through every item in foo
foo.stream().forEach(); // Does stream make a difference here
除非你需要像map或filter这样的流操作,否则它是没用的。
foo.parallelStream().forEach();
这会为计算机的每个逻辑核心生成一个新线程来计算项目。想一想你是否使用这个功能,在大多数情况下,它只能在长时间运行的情况下得到回报。
底线:流可以在没有副作用的情况下使用,例如将A类型的集合映射到B类,而不会改变A.循环很可能会改变流外的数据。
答案 1 :(得分:0)
它完成同样的工作,但范式完全不同。
Streams是函数式编程的一部分,它允许您根据要做什么而不是如何进行思考。
我知道这可能听起来很抽象,但它确实有道理。所以基本上你专注于操作而不是迭代。更不用说stream()为您提供了其他功能,如filter,map,reduce ...
并且parallelStream将使您能够使用所有内核,这非常酷 - 您将拥有一个真正的多线程应用程序,而无需额外的一行代码。