2017-11-24 2 views
0

Dieses Datenobjekt enthält einen String-Datentyp, einen ArrayList-Datentyp.Schleife mit 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); 
      } 
     }); 

Ich möchte es besser machen. Zum Beispiel, für andere leichter zu verstehen oder zu präzisieren Code. Wie ändere ich?

+0

Zuerst erklären, was Sie zu tun versuchen !! –

+0

nur ein Looper verschachtelt einen anderen Looper, ich möchte zu einer Kette ändern, aber mein Code ist ein Flowable geschachtelt ein anderes Flowable. @ SarathKn – user9000455

Antwort

0

Verwendung 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); 
});