Java允许您处理集合或流中的数据。 将流视为将一个集合转换为另一个集合的技术非常容易。 这可能会导致一些相当随意的代码,在该代码中,流数据被重复收集到某种类型的集合中,作为整体集合传递,然后再进行更多处理。
对于6个元素,谁在乎!
例:
// imaginary input List
上面有一个代码气味,它是流的不断收集和重新流式传输,大多数人可能会注意到这一点,并且如果这只是一种方法,则会删除一些临时列表。
大多数人会。 我见过人们不这样做。
但是,如果上述方法使用子例程来处理事物,则很容易优化子例程的API的简单性,并使它们接收和返回集合。 这样您就可以完成上述行为。
解决方案是根据filter , map和reduce类型函数从更高层次看待数据处理管道,并尝试围绕流对其进行建模。
但为什么?
将流视为无限
如今,我们的集装箱很小,我们希望他们能充分利用它们的资源。 小型容器(如果连续运行)可以处理无限制的数据流。 如果我们想象所有数据都是潜在的无限流,并设计我们的软件使用流技术来避免将所有数据都存储到内存中,则会发生两件事:
- 我们将所有情况下的流的最大内存需求优化为尽可能低
- 我们必须正确使用Streaming API,最后得到更简洁的代码,因为Stream API的声明性方面有助于描述数据转换中发生的事情。 在此过程中,我们甚至可能丢失了一些可怕的临时变量……
上面的代码将变为:
// imaginary input List
翻译自: https://www.javacodegeeks.com/2019/11/to-infinity-streams-and-beyond.html