2017-11-24 4 views
0

이 오브젝트 데이터에는 String 유형의 데이터, ArrayList 유형의 데이터가 포함됩니다.RxJava로 루프

Flowable.just(rxjava.list1).concatMap(new Function<ArrayList<Data>, Publisher<Data>>() { 
      @Override 
      public Publisher<Data> apply(ArrayList<Data> data) throws Exception { 
       return Flowable.fromIterable(data); 
      } 
     }).doOnNext(new Consumer<Data>() { 
      @Override 
      public void accept(Data data) throws Exception { 
       Flowable.fromIterable(data.data).filter(new Predicate<String>() { 
        @Override 
        public boolean test(String s) throws Exception { 
         return "d".equals(s); 
        } 
       }).subscribe(new Consumer<String>() { 
        @Override 
        public void accept(String s) throws Exception { 
         System.out.println(data.name+" loop done"); 
         data.name=data.name+"done"; 
        } 
       }); 
      } 
     }).subscribe(new Consumer<Data>() { 
      @Override 
      public void accept(Data data) throws Exception { 
       System.out.println("data name ==> "+data.name); 
      } 
     }); 

나는 더 잘하고 싶다. 예를 들어, 다른 사람들이 이해하기 쉽거나보다 간결하게 코딩 할 수 있습니다. 변경하는 방법?

+0

첫째, 당신이 뭘 하려는지 설명! –

+0

하나의 루퍼가 다른 루퍼를 중첩했지만, 하나의 체인으로 변경하고 싶지만 내 코드는 하나의 Floating 중첩 된 다른 Flowable 중 하나입니다. @ SarathKn – user9000455

답변

0

사용 concatMap :

Flowable.fromIterable(rxjava.list1) 
.concatMap(data -> 
    Flowable.fromIterable(data.data) 
    .filter(s -> "d".equals(s)) 
    .doOnNext(s -> { data.name = data.name + "done" }) 
    .ignoreElements() 
    .andThen(Flowable.just(data)) 
) 
.subscribe(data -> { 
    System.out.println("data name ==> "+data.name); 
}); 
관련 문제