2017-01-24 8 views
0

私はRxBindingを使ってアプリケーションで検索を処理しています。どのようにアイテムのリストとして結果を得るには? は、onComplete()が決して呼び出されないため、無限ストリーム内のオプションではありません。何か案は?ありがとう。Tのシーケンスをリストに変換する無限ストリーム内

RxSearchView.queryTextChanges(searchView) 
        .filter(queryString -> queryString.length() > 3 || queryString.length() == 0) 
        .debounce(500, TimeUnit.MILLISECONDS) 
        .map(CharSequence::toString) 
        .flatMap(s -> Observable.from(fishPlaces) 
              .filter(fishPlace -> fishPlace.getName().toLowerCase().contains(s.toLowerCase()))) 
        .subscribe(fishPlace -> { **// HOW TO GET A LIST<FISHPLACE> HERE???** }, throwable -> {}); 

答えて

1

私はあなたが後にしていると思う何が」のリストであります特定の検索文字列に一致する「fishPlaces」を検索します。

「fishPlaces」の量が有限であると推測します。それ以外の場合はリストを作成するのは意味がありません。 (実際にコードを実行せずに)小さな変更で

、私は次のように働くだろうと思います:

RxSearchView.queryTextChanges(searchView) 
        .filter(queryString -> queryString.length() > 3 || queryString.length() == 0) 
        .debounce(500, TimeUnit.MILLISECONDS) 
        .map(CharSequence::toString) 
        .map(s -> Observable.from(fishPlaces) 
             .filter(fishPlace -> fishPlace.getName().toLowerCase().contains(s.toLowerCase())) 
             .toList().toBlocking().single()) 
        .subscribe(fishPlaces -> { /* Go fishing! */ }, throwable -> {}); 
+0

これは動作します。ありがとうございました。 – lordmegamax

1

フラットマップ内で観測可能な部分はブロックされますが、だから、あなたはflatmap()の代わりにmap()をして、toList()をfishplacesの観測可能な部分に対して行うことができます。

の.map(S - 。> Observable.from(fishPlaces).filter(FP->のfoo(S、FP))ToListメソッド()))

+0

それは動作します。ありがとうございました。 – lordmegamax

関連する問題