fromCallable
和 defer
有不同的实现。我听有人说defer
有助于递归,但我无法生成任何显示它们之间差异的代码。
我尝试了无限数量的实现:
private Observable<Integer> numbers(int start) {
return Observable.just(start)
.concatWith(Observable.defer(() -> numbers(start + 1)));
}
但是订阅时我仍然收到堆栈溢出异常
最佳答案
fromCallable
创建发出单个值的 observable,然后完成。defer
推迟实际 observable 的创建,直到它被订阅。因此,您可以根据订阅时的状态创建多值 observable。例如:
Observable<Integer> daysOfWeekLeft =
Observable.defer(() ->
Observable.range(currentDayOfWeek(), 7 - currentDayOfWeek()));
基本上你可以用
fromCallable
达到同样的效果。像这样:Observable<Integer> daysOfWeekLeft =
Observable.fromCallable(() -> currentDayOfWeek())
.flatMap(day -> Observable.range(day, 7 - day));
附注。您的无限数字流代码会导致无限递归。可能需要使用调度程序来避免这种情况。
关于java - fromCallable 和 defer 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42839339/