Kotlin - 列表过滤中的列表
Kotlin - List within a List filtering
我有那些数据类:
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
return 列表中包含筛选列表?或者也许还有其他方法?
编辑
谢谢,但我认为 flatmap
不完全是我需要的。 flatmap
returns 嵌套列表(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,它作为地图工作,但将所有映射的集合合并为一个:
val result = routeTypes // List<RouteType>
.filter { it.type in filter.keys }
.flatMap {
routeType -> 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]!! }) }
我有那些数据类:
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
return 列表中包含筛选列表?或者也许还有其他方法?
编辑
谢谢,但我认为 flatmap
不完全是我需要的。 flatmap
returns 嵌套列表(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,它作为地图工作,但将所有映射的集合合并为一个:
val result = routeTypes // List<RouteType>
.filter { it.type in filter.keys }
.flatMap {
routeType -> 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]!! }) }