groupBy por el valor del mapa en una lista de mapas
Tengo una lista de mapas como esta
val data = List(
Map[String, String]("name" -> "Bob", "food" -> "pizza", "day" -> "monday"),
Map[String, String]("name" -> "Ron", "food" -> "hotdog", "day" -> "tuesday"),
Map[String, String]("name" -> "Tim", "food" -> "pizza", "day" -> "wednesday"),
Map[String, String]("name" -> "Carl", "food" -> "hotdog", "day" -> "wednesday")
)
Quiero crear un mapa como este a partir de esa lista de mapas
val result = Map("pizza" -> Map("name" -> ("Bob", "Tim"), "day" -> ("monday", "wednesday")),
"hotdog"-> Map("name" -> ("Ron", "Carl"), "day" -> ("tuesday", "wednesday")))
¿Cómo puedo lograr este resultado? Gracias
*pd Soy principiante en Scala
davy.ai
Para lograr el resultado deseado, puedes utilizar las funciones
groupBy
ymapValues
. Aquí tienes una implementación de ejemplo:Explicación: Primero, utilizamos
groupBy
para agrupar la lista original de mapas por la clave “food”, lo cual nos proporciona un Map de listas de mapas (donde cada lista contiene mapas con el mismo valor “food”). Luego, utilizamosmapValues
para transformar cada entrada (es decir, cada lista de mapas) en el formato sub-mapa deseado.Para obtener los valores de “name” y “day” en cada sub-mapa, utilizamos la función
map
en la listafoodData
para extraer los valores correspondientes de cada mapa, y luego utilizamoshead
ytail
para obtener el primer y segundo elemento de cada lista resultante. Finalmente, creamos un nuevo Map con los valores de “name” y “day” como tuplas, y utilizamos la clave del resultado original degroupBy
como clave para este sub-mapa.Ten en cuenta que esta implementación asume que cada valor de “food” aparece exactamente dos veces en la lista original de mapas, y que cada valor de “name” y “day” es único dentro de cada grupo.