Kotlin – List列表中的列表过滤
我有这些数据类:
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]!! }) }
有没有另一种方法来获得它?
由于你的数据是不可变的(这是一件好事),所以你需要在过滤时复制它。 使用copy
使其更具可扩展性:
val result = routeTypes .filter { it.type in filter.keys } .map { it.copy(items = it.items.filter { it.id in filter[routeType.type]!! }) }
您可以使用flatMap来作为map,但将所有映射的集合合并为一个:
val result = routeTypes // List<RouteType> .filter { it.type in filter.keys } .flatMap { routeType -> routeType.items.filter { it.id in filter[routeType.type]!! } }
我想,在.map
创建一个新的对象是获得它的唯一方法。
val result = routeTypes .filter { it.type in filter.keys } .map { routeType -> RouteType( routeType.type, routeType.items.filter { it.id in filter[routeType.type]!! }) }