有没有办法将对象列表 "expand" 转换成带有流 API 的更大列表?
Is there a way to "expand" a list of objects into a bigger list with stream API?
考虑这个例子:我有一个 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);
"expand"当然不存在;这个想法是它将流中的每个单个对象转换为其他对象的列表,并将该列表添加到结果流中。
是否有类似的东西,或其他流利的方法?
您似乎只是在寻找 Stream.flatMap
,例如
long totalTime = list.stream()
.flatMap(rangeset -> rangeset.asRanges().stream())
.map(range -> range.upperEndpoint() - range.lowerEndpoint())
.reduce(0, (total, time) -> total + time);
考虑这个例子:我有一个 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);
"expand"当然不存在;这个想法是它将流中的每个单个对象转换为其他对象的列表,并将该列表添加到结果流中。
是否有类似的东西,或其他流利的方法?
您似乎只是在寻找 Stream.flatMap
,例如
long totalTime = list.stream()
.flatMap(rangeset -> rangeset.asRanges().stream())
.map(range -> range.upperEndpoint() - range.lowerEndpoint())
.reduce(0, (total, time) -> total + time);