Spring 如何计算项目反应堆通量的平均值?

Spring 如何计算项目反应堆通量的平均值?,spring,reactive-programming,spring-webflux,project-reactor,Spring,Reactive Programming,Spring Webflux,Project Reactor,我有一个方法返回一个通量,假设SensorData有一个字段度量值:整数 我想计算整个通量的平均值。怎样才能做到呢 val sensorFlux: Flux<SensorData> = sensorRepository.findAll() ... val sensorFlux:Flux=sensorRepository.findAll() ... Mono average=sensorFlux.collect(收集器.averagint(SensorData::getMeas

我有一个方法返回一个
通量
,假设SensorData有一个字段
度量值:整数

我想计算整个通量的平均值。怎样才能做到呢


val sensorFlux: Flux<SensorData> = sensorRepository.findAll()
...


val sensorFlux:Flux=sensorRepository.findAll()
...
Mono average=sensorFlux.collect(收集器.averagint(SensorData::getMeasure))
Mono average=sensorFlux.collect(收集器.averagint(SensorData::getMeasure))

使用辅助对象执行此操作的另一种方法:

val average = sensorFlux.map { it.measure }
                .map { Measure(1, it) }
                .reduce { t: Measure, u: Measure -> Measure(t.elements + u.elements, t.sum + u.sum) }
                .map { it.sum / it.elements }

---

data class Measure(var elements: Int, var sum: Long)

使用辅助对象执行此操作的另一种方法:

val average = sensorFlux.map { it.measure }
                .map { Measure(1, it) }
                .reduce { t: Measure, u: Measure -> Measure(t.elements + u.elements, t.sum + u.sum) }
                .map { it.sum / it.elements }

---

data class Measure(var elements: Int, var sum: Long)

请注意,collect会对
onComplete
事件做出反应,如果
流量
为“无限”(传感器数据可能是无限流量)@SimonBaslé谢谢。但是,我们怎么可能在不等待完成的情况下计算平均值呢?另一种方法是,我想,有一个运行平均值,从而返回一个通量,每次传感器发出时,它都会发出一个新的平均值。是的,在这种情况下,您需要打开源窗口并计算一段时间内的运行平均值,可能请注意collect对
onComplete
事件的反应,如果
流量
是“无限的”(传感器数据可能是无限的流量),这就永远不会发生了@SimonBaslé谢谢。但是,我们怎么可能在不等待完成的情况下计算平均值呢?另一种方法是,我想,有一个运行的平均值,然后返回一个通量,它会在每次传感器发出时发出一个新的平均值。是的,在这种情况下,你可能需要打开源窗口,计算一段时间内的运行平均值