为什么 java.util.stream.Collectors 总是创建一个新的 Collector?

Why does java.util.stream.Collectors always create a new Collector?

提问人:Alan Snyder 提问时间:11/9/2023 最后编辑:SlawAlan Snyder 更新时间:11/9/2023 访问量:63

问:

如果我理解正确的话,a 是一个不可变的函数元组。 那么,为什么这些方法都为每个请求创建一个新的呢? 例如,只要发生类型擦除,我认为只需要一个。CollectorCollectorsCollectortoList()Collector

java-stream

评论

5赞 shmosel 11/9/2023
问得好。他们可能认为,为了避免不受限制的投射,并与接受论点的收藏家保持一致,值得付出微不足道的成本。Смотритетакже: stackoverflow.com/questions/43864005/...
0赞 Louis Wasserman 11/9/2023
是什么让您如此确定保存一个 Collector 供所有人使用会更有效率?
0赞 Alan Snyder 11/12/2023
@LouisWasserman我不确定重用 Collector 是否更有效,但可能更有效。我很确定它的效率不会降低,但请随时解释这是如何发生的。
2赞 Holger 11/15/2023
要重用一个对象,你必须保留对它的引用,保持它的内存永久分配,而不管你以后是否真的需要它。这显然不如只在你真正需要的时候保留对象更有效率。只有在以下情况下,接受这个缺点才会得到回报:1)构造对象的成本很高,因此跳过构造可以节省时间(不适用于收集器)或2)预计会同时存在许多实例,因此使用一个共享实例可能会净减少分配的内存(这里不太可能)。

答: 暂无答案