将流或序列转换为流或摘要序列
Convert stream or sequence to a stream or sequence of summaries
使用 Kotlin,我如何将 Sequence
个详细对象转换为 Sequence
个摘要对象,其中每个摘要对象代表固定数量的详细对象?它有点像 map
,但它不是一对一,它有点像 reduce
,但它不是单个累加器?
例如:
var hourlyInfo: Sequence<HourlyData> = ...
var dailyInfo: Sequence<DailySummary> = hourlyInfo.somethingMagical()
流而不是序列有同样的问题怎么办?
如果已知固定数量的项目,则使用 chunked
然后映射。迭代序列时,将分配每个项目块的实际列表。
var dailyInfo: Sequence<DailySummary> = hourlyInfo
.chunked(12)
.map(::DailySummary) // for example if it has a constructor taking a List of 12 HourlyData
如果 HourlyData 列表没有排序,或者没有固定大小,那么我想你必须按 HourlyData 中的一些 属性 分组,然后映射它。这不会保留序列状态。
var dailyInfo: Sequence<DailySummary> = hourlyInfo
.groupBy(HourlyData::hourOfDay)
.map { (hour, listOfHourlyData) -> DailySummary(hour, listOfHourlyData) }
使用 Kotlin,我如何将 Sequence
个详细对象转换为 Sequence
个摘要对象,其中每个摘要对象代表固定数量的详细对象?它有点像 map
,但它不是一对一,它有点像 reduce
,但它不是单个累加器?
例如:
var hourlyInfo: Sequence<HourlyData> = ...
var dailyInfo: Sequence<DailySummary> = hourlyInfo.somethingMagical()
流而不是序列有同样的问题怎么办?
如果已知固定数量的项目,则使用 chunked
然后映射。迭代序列时,将分配每个项目块的实际列表。
var dailyInfo: Sequence<DailySummary> = hourlyInfo
.chunked(12)
.map(::DailySummary) // for example if it has a constructor taking a List of 12 HourlyData
如果 HourlyData 列表没有排序,或者没有固定大小,那么我想你必须按 HourlyData 中的一些 属性 分组,然后映射它。这不会保留序列状态。
var dailyInfo: Sequence<DailySummary> = hourlyInfo
.groupBy(HourlyData::hourOfDay)
.map { (hour, listOfHourlyData) -> DailySummary(hour, listOfHourlyData) }