gpt4 book ai didi

java - fromCallable 和 defer 有什么区别?

转载 作者:行者123 更新时间:2023-12-01 09:34:42 32 4
gpt4 key购买 nike

fromCallabledefer有不同的实现。我听有人说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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com