Tengo el siguiente CSV
US;Americas CA;Americas FR;Europe CH;Asia ...Quiero tener Mapa de -> Cadena, Lista, ¿es posible lograr esto a través de un asociado o algo más?
Hasta ahora tengo esto:
csv.split("\n").associate { val (code, region) = it.split(";") region to code }pero esto es solo mapear la región a un solo código, también lo intenté
region to listOf(code)Resultado Esperado:
Americas -> US, CA, BR ... Europe -> FR, IT, CH ... Asia -> CH, JP, KR ...csv .split("\n") .groupBy({ it.substringAfter(";") }) { it.substringBefore(";") }})associate reemplazaría el valor si la clave ya se itera. En su lugar, puede usar groupBy para especificar la clave y el valor para el mapa
csv.split("\n").map { val (code, region) = it.split(";") region to code }.groupBy({ it.first }) { it.second }Alternativamente a la excelente respuesta de sidgate, también podrías hacer
csv.split("\n").groupBy({ it.split(";")[1] }){ it.split(";")[0] }Evita tener que crear un mapa primero, pero las llamadas se dividen con más frecuencia. No estoy seguro de qué sería mejor en términos de velocidad/eficiencia.