我有这些数据类:
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) 我在我的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)