2015-02-26 35 views
4

考慮這個例子:我有一個RangeSet列表,其中包含例如時間戳。我想得到使用java8流的範圍的總持續時間,而不是命令的方式:有沒有辦法通過流API將對象列表「擴展」爲更大的列表?

// "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); 

「擴展」當然不存在;它的想法是將流中的每個單個對象轉換爲其他對象的列表,並將該列表添加到結果流中。

是否有類似的東西,或其他方式流利地做到這一點?

+1

'list.stream()flatMap(rangeset - > rangeset.asRanges()流()。)mapToInt(範圍 - > range.upperEndpoint() - range.lowerEndpoint())。總和() ' – Holger

回答

12

看起來你只是在尋找Stream.flatMap,例如, 。

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