将流或序列转换为流或摘要序列

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) }