我正试图对Java中的惰性评估的应用程序形成一个全面和一致的理解。
以下是我目前的理解:
我想要做的是把所有这些想法结合起来,确保我没有歪曲任何东西。我觉得这很棘手,因为每当我读到关于Java流的任何文献时,它都会继续说它们是懒惰的或使用懒惰的评估,然后非常交替地开始谈论诸如融合和短路之类的优化。
那么,我说的对吗?
我希望你能对此有更深入的见解和清晰的见解。
发布于 2016-02-02 15:22:34
至于聚变。让我们想象一下下面是一个map操作:
.map(x -> x.squash())
它是无状态的,它只是根据指定的算法转换任何输入(在本例中是压缩它们)。现在,过滤器操作:
.filter(x -> x.getColor() != YELLOW)
它也是无状态的,它只是删除了一些元素(在我们的例子中是黄色元素)。现在让我们来做一个终端操作:
.forEach(System.out::println)
它只向终端显示输入元素。融合意味着将所有中间无状态操作与终端使用者合并为单个操作:
.map(x -> x.squash())
.filter(x -> x.getColor() != YELLOW)
.forEach(System.out::println)
整个管道被融合成单一的Consumer,直接连接到源。当处理每个元素时,源分配器只执行合并的使用者,流管道不会拦截任何内容,也不会执行任何额外的簿记操作。那是聚变。聚变不依赖于短路.可以在不进行融合的情况下实现流(执行一次操作、获取结果、执行下一次操作、在每次操作后将控件带回流引擎)。也有可能在不短路的情况下进行融合。
https://stackoverflow.com/questions/35150231
复制相似问题