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();