繁体   English   中英

从while循环创建Flowable

[英]Create Flowable from while loop

我对RxJava很陌生,我需要使用几个数据源创建存储库。 这对我来说很复杂,因为有几个较小的子任务,我不知道如何用RxJava来实现。

首先,我有一个自写的dao,它可以处理InputStream,并提供指定范围内的Items。 目前,它只是在列表中收集数据,但我想使用flowable逐一提供Items; 目前它私有Maybe<List<Item>> 另外,还需要将几个错误传输到更高级别(数据源)。 例如EndOfFile,以通知DataSource数据已完全缓存;

Dao.class

List<Item> loadRange(int start, int number) throws ... {
    ...
    while(...) {
        ...
        //TODO contribute item to flowable
        resultList.add(new Item(...)) 

    }
    return resultList;
}

刚刚创建的Maybe<List<Item>>方法Maybe.fromCallable() ;

请帮我!

这样的事情应该适用于此:

Flowable<Item> loadRange(int start, int number) {
        return Flowable.create(emitter -> {
            try {
                while (...){
                    emitter.onNext(new Item());
                }
                emitter.onComplete();
            } catch (IOException e) {
                emitter.onError(e);
            }
        }, BackpressureStrategy.BUFFER);
    }

我假设一旦完成循环,您就想完成,还向下游发送错误,而不是处理方法签名。 您也可以更改BackPressureStrategy以适合您的用例,例如DROPLATEST等。

当您不熟悉RxJava时,匿名类将是:

Flowable<Item> loadRange(int start, int number) {
        return Flowable.create(new FlowableOnSubscribe<Item>() {
            @Override public void subscribe(FlowableEmitter<Item> emitter) {
                try {
                    while (...){
                        emitter.onNext(new Item());
                    }
                    emitter.onComplete();
                } catch (IOException e) {
                    emitter.onError(e);
                }
            }
        }, BackpressureStrategy.BUFFER);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM