2016-10-02 16 views
2

私はRxJavaを初めて使用しており、正しい演算子を見つけることができません。 私はcombineLatestのようなものを持っていますが、最初のObservableがアイテムを放出し、最後のアイテムを2番目のObservableから取ったときだけイベントを出します。 私は現在BehaviourSubjectを使っていますが、そのようなことをしている演算子があれば外部変数を避けたいと思います。2つの観測値を結合し、最初の観測値が放出されたときにのみ放出するRxJava演算子

私が今持っているもの:

 BehaviorSubject<Login> inputSubject = BehaviorSubject.create(); 
    Observable. 
      combineLatest(
        RxTextView.textChanges(inputEmail.getEditText()), 
        RxTextView.textChanges(inputPassword.getEditText()), 
        Login::new) 
      .subscribe(inputSubject); 
    return RxView.clicks(loginBtn).map(v -> inputSubject.getValue()); 

答えて

0

あなたは二combineLatestを使用することができます。

Observable<Void> clicks = RxView.clicks(loginBtn); 
Observable<Login> loginData = ... 

class TaggedLogin { 
    Object tag; 
    Login data; 

    TaggedLogin(Object tag, Login data) { 
     this.tag = tag; 
     this.data = data; 
    } 
} 

return Observable.combineLatest(
    clicks.map(v -> new Object()), 
    loginData, 
    TaggedLogin::new 
).distinctUntilChanged(tl -> tl.tag).map(tl -> tl.data); 

いずれかが新たな価値を持っている場合combineLatestが放出されますので、タグによるジャグリングが必要です。次の

あなたがExperimentalの機能を使用するために喜んでいる場合(別名RxJavaが削除または将来的にそれらを変更する場合があります)が可能です:

Observable<Void> clicks = RxView.clicks(loginBtn); 
Observable<Login> loginData = ... 

return clicks.withLatestFrom(loginData, (v, data) -> data); 
+0

ありがとう!本当に私の愚か! – Heisenberg

0

あなたがそれらを結合するために、第2の観察可能と使用ジップ上の最後の演算子を使用する必要があります。

+0

しかし、onCompleteの()は、最後を呼び出すことはありません、観察秒()演算子は何も出さない – Heisenberg

+0

"2番目のObservableから最後のアイテムを取る"と言ったので、質問を言い換える必要があります。 onComplete呼び出しがない場合、最後の項目は何を意味しますか? – Snicolas

関連する問題