为什么 Rx 打印整个数组而不是每个项目

Why does Rx print whole array and not each item

我有以下代码:

 val places: Array<String> = arrayOf("Singapore", "Japan", "Norway") // From an Array - Output will be elements of the array
        val observable = Observable.fromArray(places)


        var result = "Hello, "

        observable.subscribe(
            { item ->
                result += item
            },
            { error ->
                error.printStackTrace()
            },
            {
                println("Done")
            }
        )

        print(result)
    }

我希望它打印你好,新加坡 |你好,日本 |你好,挪威

但是我得到:

Hello, [[Ljava.lang.String;@3830f1c0]

为了打印数组中的元素我错过了什么

Observable.fromArrayfromIterable 有点不同。它不采用实际数组,而是采用可变参数。这是它的签名:

public static <T> Observable<T> fromArray(T... items)

所以这样调用它实际上会给你一个包含单个元素的 Observable,它的类型是 Observable<Array<String>>:

val places: Array<String> = arrayOf("Singapore", "Japan", "Norway")
val observable: Observable<Array<String>> = Observable.fromArray(places)

您正在寻找的 Observable<String> 可以这样创建:

val observable: Observable<String> = Observable.fromArray("Singapore", "Japan", "Norway")

或者,如果您有一个现有数组,使用 spread operator:

val places: Array<String> = arrayOf("Singapore", "Japan", "Norway")
val observable: Observable<String> = Observable.fromArray(*places)