2017-11-21 10 views
3

map, concatMap, all을 사용하여 객체를 반복하는 데 여러 연산자를 사용했지만 내 목록에서 요소를 제거 할 수 없습니다.RxJava : 목록에서 요소 제거

Observable.fromIterable(selectedJobs) 
      .observeOn(AndroidSchedulers.mainThread()) // Added this from one answer in SO. but still no resolution. 
      .all(homeJob -> { 

       if (!homeJob.isCanCloseJob()) { 
        selectedJobs.remove(homeJob); // <- this is what causing Exception 
        //toast message 
       } else { 
        //do something 
       } 

       return true; 
      }) 
      .subscribe(new SingleObserver<Boolean>() { 
       @Override 
       public void onSubscribe(Disposable disposable) { 

       } 

       @Override 
       public void onSuccess(Boolean aBoolean) { 

        baseRealm.executeTransaction(realm -> realm.copyToRealmOrUpdate(selectedJobs)); 

       } 

       @Override 
       public void onError(Throwable throwable) { 
        AppLogger.e(tag, throwable.getMessage()); 
       // throws Caused by: java.util.ConcurrentModificationException 
       } 
      }); 

내가 원하는 건 다음 조건을 확인 목록에서 개체를 제거하는 것입니다 : 여기

코드의 조각이다.

답변

2

함수 프로그래밍에서는 스트림을 사용하고 있습니다. 초기 입력에서 항목을 제거하는 대신 스트림 자체를 필터링하고 필터링 된 목록을 소비자에게 전달해야합니다.

이 같아 당신이 찾고있는 무엇 :

Observable.fromIterable(listOfElements) 
      .filter(element -> { 
       if (element.isValid()) { 
        // do some action with valid `element` 
        // NOTE: this action would be performed with each valid element 
        return true; 
       } else { 
        // `element` is not valid, perform appropriate action 
        // NOTE: this action would be performed for each invalid element 
        return false; 
       } 
      }) 
      .toList() // collect all the filtered elements into a List 
      .subscribe(
        filteredElements -> /* use `filteredElements` which is List<Element> */, 
        throwable -> /* perform appropriate action with this `throwable`*/) 
     ); 
내가 filter` 사업자`로 시도
+0

하지만 필터링 된 모든 객체를 원하고 당신이() toList'으로 무슨 일을하는지의'함수를 반환하는 onSuccess에서 필터링 된 목록. 감사. 나는이 대답을 받아 들인다. – Aks4125