2017-11-30 4 views
1

は、次のデータモデル持つ:Androidの反応系プログラミングでは、フィルタを適用した後にストリームオブジェクトデータを分割する方法はありますか?

data class Response(
     private val success: Boolean, 
     private val error: Error, 
     private val data: Data 
) 

を私はsuccess == falseまたはデータオブジェクト場合success == true場合、私Observableストリーム内エラーオブジェクトを取得したいです。

私は、次の方法を試してみました:

Observable.just(Response(true, Error(), Data())) 
      .filter { response -> response.success } 
      .switchIfEmpty { } //Wanted response.error here 
      .subscribe { response-> } //Wanted response.data here instead of full response. 

誰がこれを達成する方法を知っていますか?私は私がif-elseを実装することができますflatMapの代わりfilterを使用して、私の目標を達成している

... //observableChain 
    .subscribe { result: Response -> 
     when (result) { 
      is Success -> handleSuccess(result.data) 
      is Error -> handleError(result.error) 
     } 
    } 

答えて

1

あなたは、この例では密閉されたクラス

sealed class Response { 
    data class Success(val data: Data) : Response() 
    data class Error(val error: Error) : Response() 
} 

とあなたのRXに観察可能なを使用する必要がありますフロー:

Observable.just(Response(true, Error(), Data())) 
     .flatMap { response -> 
      if(response.success) Observable.just(response.error) 
      else Observable.just(response.data) 
     } 
     .subscribe { result-> 
      when(result) { 
       is Data -> //handle data 
       is Error -> //handle error 
      } 
     } 
関連する問題