有没有办法使用流API将对象列表“扩展”为更大的列表?

考虑这个例子:我有一个RangeSet列表,其中包含例如时间戳。 我想使用java8流而不是命令式方式获取范围的总持续时间:

// "list" is List<RangeSet> long totalTime = list.stream() .expand(rangeset -> rangeset.asRanges()) .map(range -> range.upperEndpoint() - range.lowerEndpoint()) .reduce(0, (total, time) -> total + time); 

“扩展”当然不存在; 我们的想法是将流中的每个单个对象转换为其他对象的列表,并将该列表添加到结果流中。

是否有类似的东西,或其他方式来流利地做到这一点?

看起来你只是在寻找Stream.flatMap ,例如

 long totalTime = list.stream() .flatMap(rangeset -> rangeset.asRanges().stream()) .map(range -> range.upperEndpoint() - range.lowerEndpoint()) .reduce(0, (total, time) -> total + time);