RxJava / RxKotlin根据子类型拆分流

时间:2017-11-14 20:04:17

标签: kotlin rx-java rx-kotlin rx-kotlin2 rx-javafx

我有一个ResponseMessage的流,它可以是不同的子类型。我想将流分成流,我可以在自己的流中处理每种类型。

我的第一次尝试导致了这个我看不到的问题。

file.readLines()
        .toObservable()
        .map { mapper.readValue(it, ResponseMessage::class.java) }
        .groupBy { when(it) {
            is MarketChangeMessage -> it::class
            else -> it::class
        }}
        .map { it.????? } //How can possible this work?

我现在的问题是: 在一个特定子类型上将流划分为流的惯用方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以使用ofType运算符:

  

ofType() - 仅发出源Observable中属于特定类的那些项。

示例:

val messages = file.readLines()
    .toObservable()
    .map { mapper.readValue(it, ResponseMessage::class.java) }
    .share() // <-- or other multicasting operator

messages
    .ofType(MarketChangeMessage::class)
    .subscribe()

messages
    .ofType(Other::class)
    .subscribe()