我有一个可观察的,我想要发出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);
});
}