如何在 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();

使用流 API 本身。这将直接从映射的值创建一个Stream<Double>,将其映射到基元DoubleStream并返回总和。

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

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

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


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

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

最新更新