循环使用RxJava

时间:2017-11-24 03:25:54

标签: rx-java rx-java2

此数据对象包括String类型的数据,ArrayList类型的数据。

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

我想做得更好。例如,更容易让其他人理解或编写更简洁的代码。如何改变?

1 个答案:

答案 0 :(得分: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);
});