小编Mic*_*ael的帖子

Kotlin - 列表过滤列表

我有这些数据类:

data class RouteType(

            @SerializedName("type")
            val type: String,

            @SerializedName("items")
            val items: List<RouteItem>)


data class RouteItem(

            @SerializedName("id")
            val id: String,

            @SerializedName("route")
            private val route: List<DoubleArray>)
Run Code Online (Sandbox Code Playgroud)

我想按类型过滤RouteType列表,并按ID过滤RouteItem列表.

我的代码现在:

// val filter: HashMap<String, List<String>>

val result = routeTypes  // List<RouteType>
                .filter { it.type in filter.keys }
                .map {
                    routeType -> routeType.items.filter { it.id in filter[routeType.type]!! }
                }
Run Code Online (Sandbox Code Playgroud)

如何.map使用过滤列表制作返回列表?或许还有另一种方式?

编辑

谢谢,但flatmap不完全是我需要的,我想.flatmap返回嵌套列表(List<RouteItem>),但我想要List<RouteType>.

我通过这段代码得到了它:

val result = routeTypes
                .filter { it.type in filter.keys }
                .map { …
Run Code Online (Sandbox Code Playgroud)

lambda list kotlin kotlin-android-extensions

7
推荐指数
1
解决办法
2万
查看次数

RxAndroid - 单击时重试可观察

我在我的Android应用程序中使用rxAndroid和rxKotlin来异步处理网络请求.现在我想在点击Snackbar按钮后重试失败的网络请求.

我的代码现在:

val citiesService = ApiFactory.citiesService

citiesService.cities()
    .subscribeOn(Schedulers.newThread()) // fetch List<String>
    .flatMap { Observable.from(it) }     // convert to sequence of String
    .flatMap { city ->
        citiesService.coordinates(city)  // fetch DoubleArray
            .map { City(city, it) }      // convert to City(String, DoubleArray)
        }
    .toList()
    .observeOn(AndroidSchedulers.mainThread())
    .doOnNext {
        listView.setOnItemClickListener { adapterView, view, position, id ->
            onItemClick(it[position])
        }
    }
    .map { it.map { it.getName(activity) } }
    .subscribe(
        { listAdapter = setupAdapter(it) },
        { showErrorSnackbar() }  // handle error
    )

fun showErrorSnackbar() {
        Snackbar.make(listView, getString(R.string.not_available_msg), Snackbar.LENGTH_INDEFINITE) …
Run Code Online (Sandbox Code Playgroud)

android rx-java rx-android rx-kotlin retrofit2

6
推荐指数
1
解决办法
1343
查看次数