Java Streams:替换分组并按toMap减少

时间:2019-07-15 14:27:42

标签: java java-stream

我之前曾问过一个有关增强某些代码here的问题。 @Holger给了我正确的答案,他说:

  

每当您发现将还原剂收集器与   groupingBy,您应该检查toMap是否更合适

这似乎是一种模式!他建议我做的事很完美。

这是众所周知的模式吗?为什么101-200比(在某些情况下)结合toMapgroupingBy好?

1 个答案:

答案 0 :(得分:7)

通过使用两个收集器的经验,这种模式变得显而易见。您会在Stackoverflow上找到一些问题解答,可以使用任一收集器解决问题,但其中一个似乎更适合特定任务。

这是ReductionMutable Reduction之间的区别。在第一种情况下,我们在流上使用reduce,在第二种情况下,我们使用collect。很自然,groupingBy收集器(以第二个Collector作为参数)是我们想要对组应用可变约简的正确工具。

显然,采用 merge 函数的toMap收集器是我们执行经典归约时的正确工具,因为该合并函数具有与归约函数,即使没有这样调用。

实际上,我们注意到执行归约的收集器返回一个Optional,这通常在与groupingBy一起使用时是不希望的,这就是toMap起作用的原因在这种情况下会更加顺利。

使用这些API时肯定会出现更多模式,但是将它们收集在一个答案中并不是Stackoverflow的范围。