【发布时间】:2021-04-08 04:13:13
【问题描述】:
我最近开始从事一个项目,他们鼓励使用流 lambda 等编写代码。基本上,函数式编程方法。虽然我发现流很有吸引力,但我对它们有一些疑问。它们如下。
-
性能 - 串行流真的比相应的集合更快、更具可扩展性吗?还是只因为有一天我们可能会使用 stream().parallel() 版本而更喜欢流?
-
内存使用 - 考虑到像 collect(toList()) 这样的终端操作通常会创建一个新对象,流是否会成为堆内存的负担?
-
垃圾收集 (GC) - 流是否比收集更友好?
-
编程范式 - 我个人认为将函数式编程风格与 OOP 混合会导致问题。
-
调试 - 我亲自用笔和纸来调试我的代码,而不是使用调试器(有些人可能更喜欢)。在调试方面流有多好?
-
操作复杂性 - 在编写日常代码(过滤分组收集映射)时,流是小菜一碟,但我发现当我必须编写复杂逻辑时,我最终会求助于旧集合基于方法,因为它更易于调整。我是唯一一个这样做的人吗?
我知道我在这里问了多个问题,但实际上它们是标题中提到的同一问题的 6 个部分。希望对这些子问题中的每一个至少有一个总结之类的答案。如果有人也可以添加一个链接来深入了解所有这些内容,那将会很有帮助。
干杯!!
【问题讨论】:
-
几乎所有问题的答案都是“视情况而定”。流通常并不神奇,它们只应在生成的代码简单明了的地方使用,这意味着不要太复杂。
-
1.您问这些问题是因为您确实已经学习并使用了流 API,并且发现该实现确实提出了这些问题吗? 2. 您对流 API 与集合 API 的比较有何看法?看起来像苹果和橘子。 3. 你想对答案做什么?告诉您的项目/团队负责人您不应该使用流 API 的原因?你肯定不是说 Java 设计者在引入流时犯了一个错误……
标签: java java-stream scalability