一般来说,谈论流是一个广阔的话题。但是,我将推断出为什么您应该更喜欢流API而不是迭代器。
首先,使用流API,我们现在可以在更高的抽象级别进行编程,就像SQL查询一样,即我们表达我们想要的东西,让库处理其余部分。
其次,流操作在幕后执行迭代(内部迭代),这意味着数据的处理可以并行完成,也可以以可能更优化的不同顺序进行。
另一方面,如果您决定显式迭代集合以执行一些计算,无论是使用迭代器还是迭代器的语法糖(增强的for循环),那么您就是显式地获取集合中的项并逐个处理它们,因此它本质上是串行的。
使用迭代器而不是流 API 也意味着当您想要并行或找到不同的方法来优化程序时,必须做更多的工作。
然而,这也意味着你花更多的时间来处理低级的细节,而不仅仅是专注于你希望你的程序做什么。
Java-8 in Action一书中也提到了:
Streams 库中的内部迭代可以自动选择并行度的数据表示和实现,以匹配您的硬件。相比之下,一旦你通过为每个迭代编写来选择外部迭代,那么你基本上就致力于自我管理任何并行性。(在实践中,自我管理意味着“有一天我们会并行化”,或者“开始涉及任务和同步的漫长而艰苦的战斗”。
Java 8需要一个像Collection这样的接口,但没有迭代器,ergo Stream!
从本质上讲,使用流API,您的生活在许多方面都变得更加轻松,但我发现最有用的是,您现在可以将更多时间放在希望代码执行的操作上,同时您可以决定并行,而无需处理低级内容。
当然,这并不是说要始终尽可能/随时使用流。相反,它陈述了在迭代器上使用流的好处。
在某些地方,使用迭代器而不是流 API 更合适,反之亦然。因此,在处理集合中的数据方面,请明智地选择哪种方法。