我试图形成一个简明而连贯的理解,关于Java Streams API内lazy evaluation(惰性计算)的应用。以下是我目前的理解:
- 元素只有在需要时才被消耗,即streams具有惰性,中间操作也具有惰性,例如过滤器只在必要时才进行过滤。 - 中间操作可以合并在一起(如果它们是无状态的)。 - 短路操作不需要处理整个stream。
我的目标是将所有这些想法融合在一起,并确保我没有误传任何信息。我感到棘手的原因是每当我阅读有关Java Streams的任何文献时,它都会说它们是lazy或利用了lazy evaluation,然后开始交换优化技巧,例如融合和短路操作。
那么,以下说法是否正确?
- 融合是如何实现流API中的lazy evaluation的 - 即元素被消耗,并且尽可能合并操作。 如果没有融合,那么我们肯定会回到急切求值作为替代方案,因为另一种方法将是在执行下一个操作之前为每个中间操作处理所有元素。 - 短路操作在没有融合或lazy evaluation的情况下仍然可能发生,但在streams的上下文中,这两个原则的实施非常有帮助。
我希望能够得到更多深入的见解和澄清。
- 元素只有在需要时才被消耗,即streams具有惰性,中间操作也具有惰性,例如过滤器只在必要时才进行过滤。 - 中间操作可以合并在一起(如果它们是无状态的)。 - 短路操作不需要处理整个stream。
我的目标是将所有这些想法融合在一起,并确保我没有误传任何信息。我感到棘手的原因是每当我阅读有关Java Streams的任何文献时,它都会说它们是lazy或利用了lazy evaluation,然后开始交换优化技巧,例如融合和短路操作。
那么,以下说法是否正确?
- 融合是如何实现流API中的lazy evaluation的 - 即元素被消耗,并且尽可能合并操作。 如果没有融合,那么我们肯定会回到急切求值作为替代方案,因为另一种方法将是在执行下一个操作之前为每个中间操作处理所有元素。 - 短路操作在没有融合或lazy evaluation的情况下仍然可能发生,但在streams的上下文中,这两个原则的实施非常有帮助。
我希望能够得到更多深入的见解和澄清。