如何在streamex中对地图流的double值求和?

时间:2016-02-22 15:58:38

标签: java java-8 java-stream streamex

StreamEx库似乎真正帮助我简明地编写Java 8流,特别是在考虑地图时(例如,使用mapKeyValue而不是手动取消打包地图条目)。

如果我在地图中有条目流,那么在vanilla Java 8中我可以用这种方式对值进行求和:

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

我也可以在StreamEx中执行此操作,但我希望在StreamEx中看到更好的方法,尽管我能想到的最好的方法是:

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

哪不好。

我错过了更好的方式吗?

1 个答案:

答案 0 :(得分:7)

由于您只对Map的值感兴趣,因此您可以:

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

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

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

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

使用DoubleStreamEx.of直接转发Collection<Double>

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

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