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]!! }) }