考虑这个例子:例如,我有一个包含时间戳的RangeSet列表。我希望使用java8流来获得范围的总持续时间,而不是使用命令式的方式:
// "list" is List<RangeSet<Long>>
long totalTime = list.stream()
.expand(rangeset -> rangeset.asRanges())
.map(range -> range.upperEndpoint() - range.lowerEndpoint())
.reduce(0, (total, time) -> total + time);
当然,“展开”并不存在;其思想是将流中的每个对象转换为其他对象的列表,并将该列表添加到结果流中。
是否有类似的东西,或另一种方法来流利地做到这一点?
发布于 2015-02-26 11:10:45
看起来你只是在找Stream.flatMap
。
long totalTime = list.stream()
.flatMap(rangeset -> rangeset.asRanges().stream())
.map(range -> range.upperEndpoint() - range.lowerEndpoint())
.reduce(0, (total, time) -> total + time);
https://stackoverflow.com/questions/28740786
复制相似问题