为什么不在Stream API中使用reduce来合并多个map?

问题描述 投票:0回答:1

在查看了有关如何在流中合并地图的几个答案之后,似乎到目前为止所有答案都建议使用“展平并收集”方法:

Map<String, Double> outMap = 
myCol.stream()
     .flatMap(m -> m.entrySet().stream())
     .collect(toMap(Map.Entry::getKey, Map.Entry::getValue, Double::sum));

但是为什么不使用归约来合并:

Map<String, Double> outMap =
myCol.stream()
     .reduce((r, r1) -> {
       r1.forEach((k, v) -> r.merge(k, v, Double::sum))
     }
     .orElseThrow(()->Exception());

减少方法有什么缺点或问题吗?

java java-stream reduce
1个回答
1
投票

减少方法有什么缺点或问题吗? 从技术角度来看,小数据负载并不是真的。

但是,对于大多数人来说,阅读该版本会比较困难,因为它使用了reduce(更少使用流操作)。

这将使阅读、理解和更改代码变得更加困难。 除此之外没有什么区别,除非您正在处理的数据负载很大!

然后,结果可能是其中一种实现比另一种实现性能更高。您需要使用 JUnit 通过负载测试来涵盖这两种实现并查看性能。

© www.soinside.com 2019 - 2024. All rights reserved.