外部迭代当使用Java集合时,我们使用外部迭代。 在外部迭代中,我们为每个循环使用for或,或者为序列中的集合的集合和过程元素获取迭代器。 以下代码计算列表中所有奇整数的平方和。 它使用每个循环访问列表中的每一个元素,然后使用if语句来过滤奇整数。 之后,它计算平方,最后存储平方和与和变量。
上面的代码生成以下结果。 内部迭代我们可以使用stream重写上面的代码。 它做的完全一样。
在上面的代码中,我们没有使用循环语句来遍历List。 我们通过流在内部执行循环。 对于奇整数计算,我们使用lambda表达式。 我们首先做了过滤,然后映射然后减少。 上面的代码生成以下结果。 顺序外部迭代通常意味着顺序代码。顺序代码只能由一个线程执行。 流被设计为并行处理元素。 以下代码并行计算列表中奇整数的平方和。
我们做的只是用parallelStream()替换stream()。 使用流提供的内部迭代时,并行计算很容易。 上面的代码生成以下结果。 命令式与功能式在命令式编程中,我们不仅控制要做什么,还要如何做。 例如,当使用命令性编程来对列表中的整数求和时。 我们必须决定如何迭代列表中的每个元素。 我们可以使用for循环,for-each循环,或者我们可以从list中获取一个Iterator对象,并使用while循环。 然后我们也要做总和。 在声明性编程中,我们只需要告诉该做什么,该部分如何由系统本身处理。 集合支持命令式编程,而流支持声明式编程。 Streams API通过使用lambda表达式支持函数式编程。 我们要对流元素执行的操作通常通过传递lambda表达式完成。 流上的操作产生结果而不修改数据源。 中间业务终端业务流支持两种类型的操作:
中间操作也称为惰性操作。 终端操作也称为急切操作。 惰性操作不处理元素,直到在流上调用热切操作。 流上的中间操作产生另一流。 Streams链接操作以创建流管道。 在下面的代码中filter()和map()都是惰性操作。 而reduce()是急切的操作。
上面的代码生成以下结果。 35 |
Archiver|手机版|小黑屋|小白教程 ( 粤ICP备20019910号 )
GMT+8, 2024-11-24 11:41 , Processed in 0.017822 second(s), 18 queries .
Powered by Discuz! X3.4
© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】