Tengo datos JSON en el formato dado:
dataset = [ { 'name': 'Sayantan', 'section': 'A', 'detail': 'complete' }, { 'name': 'Charu', 'section': 'B', 'detail': 'complete' }, { 'name': 'Sanhati', 'section': 'C', 'detail': 'inprogress' }, ]Quiero convertirlo en un mapa de <String, List<>> y obtenerlo en el siguiente formato:
{'complete': [{'detail': 'complete', 'name': 'Sayantan', 'section': 'A'}, {'detail': 'complete', 'name': 'Charu', 'section': 'B'}], 'inprogress': [{'detail': 'inprogress', 'name': 'Sanhati', 'section': 'C'}]}No tengo mucha experiencia en Kotlin, he trabajado mayormente con este tipo de casos en Python y he logrado escribir lo siguiente:
val mapOfInterest = mutableMapOf<String, List<DataResource>>() for (data in datasets) { val mapKey = data.detail if (!mapOfInterest.containsKey(mapKey)) { if (mapKey != null) { mapOfInterest[mapKey] = listOf(data) } else { mapOfInterest[mapKey] // I am stuck here } } } No puedo agregar datos al valor clave del mapa usando add() , cualquier idea o pista sería útil.
En Kotlin, las colecciones no se pueden cambiar de forma predeterminada: https://kotlinlang.org/docs/collections-overview.html . Entonces List no tiene un método add() .
Podría usar mutableListOf() en su lugar, pero la forma "correcta" de hacerlo en Kotlin es, como ya señaló Joffrey, usar la función estándar groupBy() https://kotlinlang.org/api/latest/jvm/stdlib /kotlin.colecciones/grupo-por.html