java - fromCallable 和 defer 有什么区别?

标签 java rx-java reactive-programming

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/

相关文章:

Java函数参数不变

android - 如何在 Android Room Library 中使用 RxJava?

javascript - 如何创建一个 RxJS 缓冲区来对 NodeJS 中的元素进行分组但不依赖于永远运行的间隔?

React-Native:如何制作图像数组

java - 类型不匹配 : cannot convert from java. lang.String 到 String

java - 如何使用 Stream API Java 8 生成随机整数数组?

java - 在 hibernate 中制作示例程序

java - Android 上 .flatMap() 内的奇怪调度程序行为

android - 如何从Retrofit、RxJava、Android中的所有请求发出多个请求和响应

spring-boot - 如何使用 Spring Boot 实现高 TPS