在查看了有关如何在流中合并地图的几个答案之后,似乎到目前为止所有答案都建议使用“展平并收集”方法:
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());
减少方法有什么缺点或问题吗?
减少方法有什么缺点或问题吗? 从技术角度来看,小数据负载并不是真的。
但是,对于大多数人来说,阅读该版本会比较困难,因为它使用了reduce(更少使用流操作)。
这将使阅读、理解和更改代码变得更加困难。 除此之外没有什么区别,除非您正在处理的数据负载很大!
然后,结果可能是其中一种实现比另一种实现性能更高。您需要使用 JUnit 通过负载测试来涵盖这两种实现并查看性能。