8

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

如果我在地图中有一个条目流,在 vanilla Java 8 中,我可以通过这种方式对这些值求和:

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

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

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

这是没有更好的。

我有没有更好的方法?

4

1 回答 1

8

由于您只对 的值感兴趣,因此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();
于 2016-02-22T16:01:54.527 回答