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

Gra*_*oss 8 java java-8 java-stream streamex

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

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

someMap.entrySet().stream()
    .mapToDouble(Entry::getValue)
    .sum()
Run Code Online (Sandbox Code Playgroud)

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

EntryStream.of(someMap)
    .values()
    .mapToDouble(d -> d)
    .sum();
Run Code Online (Sandbox Code Playgroud)

这不是更好.

有没有更好的方法让我失踪?

Tun*_*aki 7

既然你只对它的价值感兴趣Map,你可以:

double sum = someMap.values().stream().mapToDouble(d -> d).sum();
Run Code Online (Sandbox Code Playgroud)

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

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

double sum = DoubleStreamEx.of(someMap.values()).sum();
Run Code Online (Sandbox Code Playgroud)

使用DoubleStreamEx.of直接在服用Collection<Double>.


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

double sum = entryStream.mapToDouble(Entry::getValue).sum();
Run Code Online (Sandbox Code Playgroud)

  • @GraemeMoss我明白了.那么你在问题中所拥有的实际上是最简单的方法.我编辑了那个. (2认同)
  • @Tunaki,同意了.我甚至认为没有可能添加一些新功能来使这更简单. (2认同)