如何将每个可观察的发射收集到 rxJava2/rxKotlin2 中的一个对象中?

问题描述

Observable 发出贸易对象。 如何将每次发射操作成一个结果对象?

贸易(贸易类型:字符串,利润:BigDecimal) 结果(总利润:BigDecimal)

示例:

Trades
.scan(result: Result,currentTrade: Trade){
  result.totalProfit += currentTrade.profit
}
.subscribe(
 printLn(it.totalProfit)
)

解决方法

你有这样的想法吗?下次请提供完整示例。

import io.reactivex.rxjava3.core.Flowable
import org.junit.jupiter.api.Test
import java.math.BigDecimal

    class SoScan {
        private val seed : Result = Result(BigDecimal(0.0))
    
        internal data class Result(val total : BigDecimal)
    
        internal data class Trade(val profit : Double)
    
        @Test
        fun scan() {
            Flowable.just(Trade(1.0),Trade(1.0))
                    .scan(seed) { prev,curr ->
                        Result(prev.total.plus(BigDecimal(curr.profit)))
                    }.test()
                    .assertValues(seed,Result(BigDecimal(1.0)),Result(BigDecimal(2.0)))
        }
    }