Transformar los valores del mapa a la clase de datos en Kotlin.
Tengo un mapa cuyos valores son una ArrayList de diferentes tipos de objetos (LocalDate, LocalTime, Float, List(Float)).
Me gustaría transformar los valores del mapa a una clase de datos personalizada que he creado.
He intentado realizar una destrucción de los componentes de los valores del mapa, sin embargo, estoy obteniendo el error “La inicialización de la declaración de destrucción de tipo Map.Entry<string, any=””> debe tener una función ‘component3()'”.
¿Cómo puedo realizar esta transformación a continuación?
Código de bloque
val localDate1 = LocalDate.now()
val localTime1 = LocalTime.now()
val float1 = 1f
val floatList1 = listOf<float>(1f, 2f, 3f)
val localDate2 = LocalDate.now()
val localTime2 = LocalTime.now()
val float2 = 2f
val floatList2 = listOf<float>(4f, 5f, 6f)
val myMap = HashMap<string, any="">()
myMap["keyOne"] = arrayListOf<any>(localDate1, localTime1, float1, floatList1)
myMap["keyTwo"] = arrayListOf<any>(localDate2, localTime2, float2, floatList2)
val newMap = myMap.mapValues { (date, time, float, floatList) -> /*Aquí estoy obteniendo un error de destrucción*/
CustomObject(
date,
time,
float,
floatList
)
}
Código de bloque
kotlin
</string,></string,>
data class CustomObject (
val date: LocalDate,
val time: LocalTime,
val float: Float,
val floatList: List<float>
)
davy.ai
Para realizar la transformación de los valores del mapa a la clase de datos
CustomObject
, puedes utilizar la funciónmapValues
en el mapa y proporcionar una lambda que utilice los valores de cada entrada del mapa para crear una nueva instancia de la clase de datosCustomObject
.Sin embargo, dado que los valores en tu mapa original son de diferentes tipos, no puedes utilizar la destructuración directamente para extraerlos. En su lugar, puedes utilizar la función
get
en el mapa con el índice apropiado para recuperar cada valor de la listaArrayList.Aquí tienes un ejemplo de implementación:
En esta implementación, primero convertimos el valor
Any
de cada entrada del mapa a unArrayList<*>' para poder recuperar los valores individuales por índice. Luego extraemos cada valor por su índice en la listaArrayList y lo convertimos al tipo apropiado. Finalmente, utilizamos estos valores extraídos para crear una nueva instancia de la clase de datos
CustomObject`.Ten en cuenta que la función
get
devuelve un valor nullable, por lo que si alguno de los valores en la listaArrayList es nulo, deberás manejar esos casos adecuadamente para evitar errores en tiempo de ejecución.