如何在 streamex 中对映射流的双精度值求和?

How do I sum the double values of a map stream in streamex?

StreamEx 库似乎真的能帮助我简洁地编写 Java 8 个流,尤其是在考虑地图时(例如,使用 mapKeyValue,而不必手动拆箱地图条目)。

如果我在地图中有条目流,在原版 Java 8 中,我可以这样对值求和:

someMap.entrySet().stream()
    .mapToDouble(Entry::getValue)
    .sum()

我也可以在 StreamEx 中做到这一点,但我希望在 StreamEx 中看到更好的方法,尽管我能想到的最好的方法是:

EntryStream.of(someMap)
    .values()
    .mapToDouble(d -> d)
    .sum();

哪个好不了。

还有我想念的更好的方法吗?

由于您只对 Map 的值感兴趣,您可以只拥有:

double sum = someMap.values().stream().mapToDouble(d -> d).sum();

使用 Stream API 本身。这直接从地图的值创建了一个 Stream<Double>,将其映射到原语 DoubleStream 和 returns 总和。

使用 StreamEx,您可以将其简化为:

double sum = DoubleStreamEx.of(someMap.values()).sum();

使用DoubleStreamEx.of直接取Collection<Double>.


如果您已经有 EntryStream,您将无法拥有比以下更简单的东西:

double sum = entryStream.mapToDouble(Entry::getValue).sum();