首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >kotlin使用rxjava2映射操作符修改用户列表

kotlin使用rxjava2映射操作符修改用户列表
EN

Stack Overflow用户
提问于 2019-08-04 19:58:46
回答 2查看 58关注 0票数 0
代码语言:javascript
复制
Kotlin 1.3.31
RxJava2

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

kotlin.Unit

我认为应该将用户的list向下传递到subscribe方法中的onNext

代码语言:javascript
复制
private fun getUserListMapped() {
        val disposable = getUserListFromCallable()
            .map {
                it.forEach { user ->
                    user.gpa *= 10
                }
            }
            .subscribeOn(schedulerProvider.background())
            .observeOn(schedulerProvider.ui())
            .subscribe { println("users $it") }
    }

这就是我正在做的,以吸引我的用户:

代码语言:javascript
复制
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))
    }

非常感谢您的建议

EN

回答 2

Stack Overflow用户

发布于 2019-08-04 20:44:07

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

代码语言:javascript
复制
.map {
    it.forEach { user ->
        user.gpa *= 10
    }
    it
}

或者您可以像这样使用doOnEach

代码语言:javascript
复制
.doOnEach {
    it.forEach { user ->
        user.gpa *= 10
    }
}
票数 1
EN

Stack Overflow用户

发布于 2019-08-08 22:47:02

forEach方法返回一个Unit,这就是打印Unit的原因。您应该将map运算符更改为如下所示:

代码语言:javascript
复制
   .map { it.map { user -> user.apply { gpa *= 10 } } }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57346367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档