当前位置: 首页 > 知识库问答 >
问题:

Java 8流-收集vs减少

邵城
2023-03-14

什么时候使用collection()reduce()?有没有人有好的、具体的例子来说明什么时候走一条路或者走另一条路更好呢?

Javadoc提到collect()是一个可变约简。

以上的说法是猜测,然而,我希望一个专家在这里插话。

共有1个答案

司徒啸
2023-03-14

reduce是一个“折叠”操作,它对流中的每个元素应用一个二进制运算符,其中运算符的第一个参数是前一个应用程序的返回值,第二个参数是当前流元素。

collect是一个聚合操作,其中创建一个“集合”,并将每个元素“添加”到该集合中。然后将流的不同部分中的集合添加在一起。

您链接的文档给出了使用两种不同方法的原因:

 String concatenated = strings.reduce("", String::concat)  

所以重点是在这两种情况下并行化是相同的,但是在reduce情况下,我们将函数应用于流元素本身。在collection中,我们将函数应用于可变容器。

 类似资料:
  • 在java 8中,流API帮助我们以非常干净和更少的代码完成工作。我是这些流API的忠实粉丝。但是很少有操作能够帮助解决同一类型的问题,也不确定何时使用哪种操作,虽然在两者之间进行选择并不困难,但只想知道任何一种操作都有针对这些操作的特定用例。我所说的操作是:- 中间操作:-最小值和最大值 终端操作:

  • 问题内容: Java 8中有什么方法可以将一个元素分组而不收集它们?我希望结果再次出现。因为我必须处理大量数据甚至是无限流,所以我无法先收集数据并再次流处理结果。 所有需要分组的元素在第一流中都是连续的。因此,我喜欢使流评估保持懒惰。 问题答案: 无法使用标准Stream API做到这一点。通常,您无法执行此操作,因为将来总是有可能出现属于任何已创建组的新项目,因此,在处理所有输入之前,您无法将组

  • 在Java8中有什么方法可以在中分组元素而不收集它们吗?我希望结果再次成为。因为我必须处理大量的数据,甚至是无限的流,所以我不能首先收集数据,然后再次流化结果。 所有需要分组的元素在第一个流中是连续的。因此,我喜欢保持流评估懒惰。

  • 使用以下代码,我得到以下编译错误。我还尝试使用输入作为整数列表,而不是int[],这样做效果很好。如果我使用box(),它也可以正常工作。 我的问题真的是如果Int Stream必须是整数流,以及如何处理错误消息“lambda表达式int[]中的错误返回类型无法转换为int” 错误:(13,49)java:不兼容的类型: lambda表达式int[]中的错误返回类型无法转换为int错误:(13,6

  • 它们之间有什么相同和不同之处,看起来Java并行流中有RXJava中可用的一些元素,是吗?

  • 我有一个HashMap,我需要使用一些函数对其进行筛选: 上述代码中的错误是变量的声明类型。应该是而不是。 所以现在的功能代码是: