2017-12-17 9 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- using-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();