假设我有 mutateElement()的函数,它执行 x 操作,而 mutateElement2()执行 y 操作。这两段代码之间的性能差异是什么。
Piece1:
List<Object> = array.stream().map(elem ->
mutateElement(elem);
mutateElement2(elem);
)
.collect(Collectors.toList());
Piece2:
List<Object> array = array.stream().map(elem ->
mutateElement(elem);
)
.collect(Collectors.toList());
array = array.stream().map(elem ->
mutateElement2(elem);
)
.collect(Collectors.toList());
显然第一个实现更好,因为它只使用一个迭代器,但第二个使用两个迭代器。但如果我在阵列中说出一百万个元素,那么差异是否会显而易见。
答案 0 :(得分:2)
第一个实现并不是更好,因为它只使用一个迭代器,第一个实现更好,因为它只收集一次。
如果你有一百万个元素,没有人能告诉你这种差异是否会引人注目。 (如果有人试图告诉你,你不应该相信它们。) 基准测试。
答案 1 :(得分:1)
无论您使用流还是外部循环,问题都是一样的
第一个代码中List
上的一次迭代和第二个代码中List
上的两次迭代。
执行第二个代码的时间在逻辑上更为重要。
除了在流上调用两次终端操作外:
.collect(Collectors.toList());
而不是一次,也有成本。
但如果我说了一百万个元素,差异是否会显而易见 在阵列中。
可能是。
现在问题很难回答:是或否。
它取决于其他参数,例如cpus,并发用户数和处理数以及您对#34;明显&#34;的定义。