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