StreamEx库似乎真正帮助我简明地编写Java 8流,特别是在考虑地图时(例如,使用mapKeyValue
而不是手动取消打包地图条目)。
如果我在地图中有条目流,那么在vanilla Java 8中我可以用这种方式对值进行求和:
someMap.entrySet().stream()
.mapToDouble(Entry::getValue)
.sum()
我也可以在StreamEx中执行此操作,但我希望在StreamEx中看到更好的方法,尽管我能想到的最好的方法是:
EntryStream.of(someMap)
.values()
.mapToDouble(d -> d)
.sum();
哪不好。
我错过了更好的方式吗?
答案 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();