了解 RxJava 中的 Observable.fromArray

kuk*_*oid 3 observable rx-java

我正在尝试学习 RxJava 的不同运算符。我对 Observable.just 和 Observable.fromArray() 以及它们如何发出 Observables 有点困惑。

单个整数工作正常,但为了更好地理解差异,我尝试使用数组。我有下面的代码,它适用于单个整数,但是当我传递数组时,它显示一些编译错误,我无法理解如何解决。

单个整数的代码

Observable.fromArray(10,20,30).subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe({
                Util.d("Emit Integers : "+ it)
            })
Run Code Online (Sandbox Code Playgroud)

输出是:

Emit Integers : 10
Emit Integers : 20
Emit Integers : 30
Run Code Online (Sandbox Code Playgroud)

现在要从某个列表中发出整数,我尝试下面的代码:

var numbers = arrayOf<Int>(1, 2, 3)
Observable.fromArray(numbers).subscribeOn(Schedulers.io())
       .observeOn(AndroidSchedulers.mainThread())
        .subscribe({
            Util.d("Emit Integers: "+ it)
         })
Run Code Online (Sandbox Code Playgroud)

我得到的输出是

Emit Integers: [Ljava.lang.Integer;@8a69c02
Run Code Online (Sandbox Code Playgroud)

我期望将数组的每个项目作为 Observable 返回。fromArray() 不可能吗?如果没有,Observable.fromArray() 有什么用

sha*_*ain 7

根据他们的文档 fromArray()仅支持参考数组。但在 kotlin 中arrayOf<Int>()返回Array对象。如果我们Array在方法中放置一个 kotlin 对象fromArray(),它会创建对象数组Array(在 java 中,它将是Array[])。因此,订阅后Observable返回该对象Array。但是如果我们将项目放入fromArray()方法中,它将创建Int. 所以订阅后它会返回Int。如果您想迭代任何可变的可迭代对象,那么您可以尝试Observable.fromIterable()