Kotlin – Lista dentro de un filter de list

Tengo esas classs de datos:

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>) 

Deseo filtrar la list de RouteType por tipo y filtrar la list de RouteItem en ella por id.

Mi código ahora:

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

¿Cómo hacer una list de retorno .map con una list filtrada? O tal vez hay otra manera?

EDITAR

Gracias, pero flatmap no es exactamente lo que necesito, creo. flatmap devuelve una list anidada ( List<RouteItem> ), pero quiero List<RouteType> .

Lo tengo por este código:

 val result = routeTypes .filter { it.type in filter.keys } .map { routeType -> RouteType( routeType.type, routeType.items.filter { it.id in filter[routeType.type]!! }) } 

¿Hay alguna otra forma de getlo?

Como sus datos son inmutables (eso es algo bueno), debe copyrlos durante el filtrado. Use copy para hacerlo más extensible:

 val result = routeTypes .filter { it.type in filter.keys } .map { it.copy(items = it.items.filter { it.id in filter[routeType.type]!! }) } 

Puede usar flatMap para esto, funciona como un map, pero combina todas sus collections asignadas a una:

 val result = routeTypes // List<RouteType> .filter { it.type in filter.keys } .flatMap { routeType -> routeType.items.filter { it.id in filter[routeType.type]!! } } 

Supongo que la creación de un nuevo object dentro de .map es la única forma de getlo.

 val result = routeTypes .filter { it.type in filter.keys } .map { routeType -> RouteType( routeType.type, routeType.items.filter { it.id in filter[routeType.type]!! }) } 
  • ¿Tiene Kotlin una function de "enumerar" como Python?
  • La relación entre la interfaz compartida en Java y Kotlin (por ejemplo: Lista <>)
  • Ordenar datos de una MutableList en Kotlin
  • Obtener un par de numbers de la list de numbers en Kotlin