kotlin使用rxjava2映射运算符修改用户列表

kotlin使用rxjava2映射运算符修改用户列表,kotlin,rx-java2,Kotlin,Rx Java2,我有下面的方法,应该通过使用map操作符获得用户和循环的列表,并将gpa增加10。然后在onNext中打印结果。然而,我得到的是: kotlin.单位 我在想,用户的列表应该在subscribe方法中向下传递到onNext Kotlin 1.3.31 RxJava2 这就是我为获得我的用户所做的: private fun getUserListMapped() { val disposable = getUserListFromCallable() .m

我有下面的方法,应该通过使用map操作符获得用户和循环的列表,并将gpa增加10。然后在
onNext
中打印结果。然而,我得到的是:

kotlin.单位

我在想,用户的
列表
应该在
subscribe
方法中向下传递到
onNext

Kotlin 1.3.31
RxJava2
这就是我为获得我的用户所做的:

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.fromCallable{createListOfUsers()}
}
private fun createListOfUsers():列表{
Thread.sleep(500L)//模拟从网络或本地获取
返回列表(
用户(“约翰”,“巴黎城”,5.6F),
用户(“西蒙”,“霍兰德广场”,2.56F),
用户(“丽莎”,“伦敦桥”,3.89F),
用户(“彼得”,“东京山”,4.3F))
}

非常感谢您在
地图中提供的任何建议

,您必须返回值:

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))
    }
或者您可以像这样使用
doOnEach

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

映射中
必须返回值:

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))
    }
或者您可以像这样使用
doOnEach

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

forEach
方法返回一个
Unit
,这就是为什么您会看到打印的
Unit
。您应该将
map
操作符更改为如下内容:

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

forEach
方法返回一个
Unit
,这就是为什么您会看到打印的
Unit
。您应该将
map
操作符更改为如下内容:

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

这是您在函数
map
it.forEach{user->user.gpa*=10}
中的返回值这是您在函数
map
it.forEach{user->user.gpa*=10}