使用RxJava根据其发出的值重新启动observable

时间:2017-09-10 20:00:16

标签: java android rx-java rx-android

我有一个可观察的,我想要发出Integer个值,但是如果其中一个发射值为负,我希望observable再次发出值,发射之间有1秒的延迟,直到没有负值。

我找到了这个答案Repeat/Resubscribe to Observable with condition based on emitted item(s)并且我不太喜欢它,因为它使用递归可能会降低设备的速度(取决于为获得正确结果需要多少次尝试)

还有其他(正确的)方法吗?我也不知道如何设置每个发射的延迟,除了第一个。

这就是我现在所拥有的:

getObservable().subscribe(valueList -> {
        for (Integer value : valueList) {
            Log.d("TAG", "value: " + value);
        }
    });

private Observable<List<Integer>> getObservable() {
    return Observable.fromCallable(() -> {
        List<Integer> list = new ArrayList<>();
        Random random = new Random();
        for (int i = 0; i < 10; i++) {
            list.add(random.nextInt(12) - 1);
        }
        return list;
    }).flatMap(valueList -> {
        for (int i = 0; i < valueList.size(); i++) {
            if (valueList.get(i) < 0) {
                Log.d("TAG", "Negative value = " + valueList.get(i) + ", index = " + i);
                return getObservable().delay(1, TimeUnit.SECONDS);;
            }
        }
        return Observable.just(valueList);
    });
}

0 个答案:

没有答案