2017-12-17 10 views
0

RxJavaでアイテムリストをフィルタリングするにはどうすればよいですか?RxJavaを使用したアイテムのフィルタリスト

私は、次のコードを持っているとloadData()List<Chatroom>発する:

repository.loadData() 
     .subscribe(chatrooms -> { 
      view.showData(chatrooms); 
      view.showEmptyState(chatrooms.size() == 0); 
     }, throwable -> Log.i("OnError", "onLoadChatrooms ", throwable))); 

と私はloadData()後にフィルタを適用したいです。次のコードスニペットで私の解決策を見ることができますが、もっと良い方法がありますか?

repository.loadData() 
     .map(chatrooms -> { 

      List<Chatroom> openChatrooms = new ArrayList<>(); 
      for (Chatroom chatroom: chatrooms){ 
       if (!chatroom.getBlocked().equals(IS_BLOCKED)) { 
        openChatrooms.add(chatroom); 
       } 
      } 
      return openChatrooms; 

     }) 
     .subscribe(chatrooms -> { 
      view.showData(chatrooms); 
      view.showEmptyState(chatrooms.size() == 0); 
     }, throwable -> Log.i("OnError", "onLoadChatrooms ", throwable))); 
+0

http://reactivex.io/documentation/operators/filter.html – LordRaydenMK

+0

[RxとRetrofitを使用したレスポンスのフィルタリング]の可能な複製(https://stackoverflow.com/questions/40096608/filter-a-response- use-rx-and-retrofit) – theFunkyEngineer

答えて

2
loadData() 
    // Opther operations if any 
    .filter((chatroom -> { return !chatroom.getBlocked().equals(IS_BLOCKED);}) 
    .toList() 
    .subscribe(getObserver()); // implement your getObserver() method for observer. 

-

通常、私は次のように書きます。

2

あなたの解決策は、スタイルで「機能していない」場合は問題ありません。これは役立つはず

loadData() 
     .flatMap(chatrooms -> { return Observable.from(chatrooms); }) 
     .filter(chatroom -> { return !chatroom.getBlocked().equals(IS_BLOCKED); }) 
     .toList(); 
関連する問題