gpt4 book ai didi

java - 是否允许/建议重用收集器?

转载 作者:IT老高 更新时间:2023-10-28 20:37:27 25 4
gpt4 key购买 nike

我的代码中有很多地方可以做到:

someStream.collect(Collectors.toList())

在哪里 Collectors.toList()每次使用都会创建一个新的收集器。

这让我想到了是否允许和建议这样做:

private final static Collector<…> TO_LIST = Collectors.toList()

对于我使用的每种类型,然后使用单个收集器,例如:

someStream.collect(TO_LIST)

当需要收集器时。

由于收集器是无状态的,只是功能和特性的集合,我认为它应该可以工作,但是 OTOH,Collectors.toList()创建一个新的 CollectorImpl<>每次通话。

重用收集器有什么缺点?

最佳答案

我认为这更像是一个风格的问题,但让我们给出一些想法:

  • 使用这样的 CONST 收集器对象似乎是常见的 做法。从这个意义上说:这样做可能会让一些读者感到惊讶,而让读者感到惊讶很少是一件好事。
  • 然后:很少有代码可以随便“复制”(可能不应该避免代码重复);但仍然:指向一个 distinct 收集器对象可能会使您更难重构或重用您的流构造。
  • 除此之外:你自己说的;收集器重用取决于 无状态实现。所以你让自己依赖于任何无状态的实现。可能不是问题;但也许要记住一个风险!
  • 可能更重要的是:从表面上看,您的想法似乎是优化 的好方法。但是很好;当您担心使用流的“性能影响”时,最终收集器的单个对象创建将“不会削减它”!

我的意思是:如果您担心“浪费”性能;您宁愿查看使用流的每一行代码,以确定该流是否与“足够”的对象一起工作,以首先证明使用流的合理性。这些流会带来相当多的开销!

长话短说:Java 社区尚未找到流的“标准最佳实践”;因此,此时我的(个人)两分钱:更喜欢“每个人”都在使用的那些模式——避免做你自己的事情。尤其是当它与“性能相关”时。

关于java - 是否允许/建议重用收集器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43864005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com