Kotlin - 列表过滤中的列表
Posted
技术标签:
【中文标题】Kotlin - 列表过滤中的列表【英文标题】:Kotlin - List within a List filtering 【发布时间】:2016-08-05 03:32:32 【问题描述】:我有那些数据类:
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>)
我想按类型过滤 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]!!
如何使.map
返回列表中包含过滤列表?或者也许还有其他方法?
编辑
谢谢,但flatmap
不是我需要的,我想。 flatmap
返回嵌套列表(List<RouteItem>
),但我想要List<RouteType>
。
我通过这段代码得到了它:
val result = routeTypes
.filter it.type in filter.keys
.map
routeType -> RouteType(
routeType.type,
routeType.items.filter it.id in filter[routeType.type]!! )
还有其他方法可以得到吗?
【问题讨论】:
flatMap() 是您要找的吗? 【参考方案1】:由于您的数据是不可变的(这是一件好事),您需要在过滤时复制它。使用copy
使其更具可扩展性:
val result = routeTypes
.filter it.type in filter.keys
.map it.copy(items = it.items.filter it.id in filter[routeType.type]!! )
【讨论】:
欢迎您!不确定在任何地方都使用it
。对我来说这里很好,但可以随意指定您认为合适的名称
这里是什么
"it" in lambdas: kotlinlang.org/docs/reference/…【参考方案2】:
您可以为此使用 flatMap,它可以用作地图,但会将所有映射的集合合并为一个:
val result = routeTypes // List<RouteType>
.filter it.type in filter.keys
.flatMap
routeType -> routeType.items.filter it.id in filter[routeType.type]!!
【讨论】:
以上是关于Kotlin - 列表过滤中的列表的主要内容,如果未能解决你的问题,请参考以下文章