Kotlin使用RXJAVA2映射操作员修改用户列表


Kotlin 1.3.31
RxJava2

i具有以下方法,该方法应通过使用地图操作员来获取用户和循环列表,然后将GPA提高到10。然后将结果打印在onNext中。但是,我要打印的是:

kotlin.Unit

我认为,用户的list应将流传递到subscribe方法

中的onNext
private fun getUserListMapped() {
        val disposable = getUserListFromCallable()
            .map {
                it.forEach { user ->
                    user.gpa *= 10
                }
            }
            .subscribeOn(schedulerProvider.background())
            .observeOn(schedulerProvider.ui())
            .subscribe { println("users $it") }
    }

这是我为吸引用户而做的:

private fun getUserListFromCallable(): Observable<List<User>> {
        return Observable.fromCallable { createListOfUsers() }
    }
    private fun createListOfUsers(): List<User> {
        Thread.sleep(500L) // simulate getting from the network or local
        return listOf(
            User("john", "paris town", 5.6F),
            User("simon", "hollands place", 2.56F),
            User("lisa", "london bridge", 3.89F),
            User("peter", "tokyo hills", 4.3F))
    }

非常感谢您的建议

在您的map中,您必须返回值:

.map {
    it.forEach { user ->
        user.gpa *= 10
    }
    it
}

或者您可以这样使用doOnEach

.doOnEach {
    it.forEach { user ->
        user.gpa *= 10
    }
}

forEach方法返回Unit,这就是为什么您会看到Unit打印。您应该将map操作员更改为这样的东西:

   .map { it.map { user -> user.apply { gpa *= 10 } } }

最新更新