kotlin使用rxjava2映射运算符修改用户列表
我有下面的方法,应该通过使用map操作符获得用户和循环的列表,并将gpa增加10。然后在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
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}