2016-09-06 18 views
1

私はObservableに外部変数や余分なクラスを持たずにこれを回そうとしています。これは可能ですか?これは、リストを、基本的な検索です:RxJavaリスト内の項目を検索

//... 
    for(int i = 0; i < items.size(); i++) { 
     if(items.get(i).id == findId) return i; 
    } 
    return -1; 

だから、基本的に私は私が見つけた場合、私は、「項目」リスト内の項目のインデックスを返すしたい文字列IDを持っています。

Observable.fromCallable(() -> { 
      for(int i = 0; i < items.size(); i++) { 
       if(items.get(i).id == findId) return i; 
      } 
      return -1; 
     }); 

以上の宣言的なアプローチ:追加せずにこれを行うための

Observable.from(items) 
       .filter(item -> item.id == findId) 
       .map(items::indexOf); 

答えて

3

ワン「きちんと」道のオーバーヘッドがある横断行くに

1

一つの方法は、Observableを作成するために、fromCallableメソッドを使用することです

Observable<Integer> index = Observable.from(items) 
      .takeWhile(item -> item.id != findId) 
      .count() 
      .map(count -> count == data.size() ? -1 : count); 

しかし、私は非Rに固執しますxアプローチを使用している場合

+0

2番目(宣言的)アプローチでアイテムが見つからない場合は、エラーをスローしたり、エラーコードを返したり、nullを返すことができますか? – GaRRaPeTa

+0

Observable.from(アイテム) .filter(項目 - > item.id == findId) .toList() .MAP(filteredItems - > { IF(filteredItems.isEmpty())リターン-1; 他リターンitems.indexOf(filteredItems.get(0)); }); – krp

関連する問題