J'ai une classe de données avec 3 champs sur le type val.

data class Person(
    val id: UUID? = null,
    val name: String,
    val address: String?
)

J'ai une classe Famille qui contient :

    val familyId: UUID? = null,
    val pList: List<Person>

Dans l'une des autres classes, je dois parcourir le pList MAIS je dois modifier le champ d'adresse de la personne tout en le récupérant à partir d'une autre carte, en fonction de l'identifiant.

Je sais que je peux utiliser la méthode copy() pour remplir un champ immuable mais je ne sais pas comment le faire exactement. J'essayais quelque chose comme ça mais je ne semble pas fonctionner.

family.pList.forEach {
    it.copy(address = ‘I am getting this value from a map’ )
}

Je pensais que l'adresse serait remplie avec la nouvelle valeur, mais ce n'est pas le cas.

Notez également que le champ d'adresse dans la pList n'est pas renseigné.

0
IllegalSkillsException 19 févr. 2020 à 17:50

1 réponse

Meilleure réponse

La fonction copy renvoie une nouvelle instance de l'objet avec les champs renseignés comme prévu lors de l'appel de copy. Vous devez donc enregistrer les nouveaux objets quelque part. Votre méthode, telle qu'elle est écrite, crée un objet copié et le supprime essentiellement immédiatement.

Voici ce que je ferais:

val withAddresses = family.pList.map {
    it.copy(address = "I am getting this value from a map")
}

La nouvelle variable, withAddresses, fait référence à la liste des objets Person avec le champ d'adresse renseigné.

2
A. Thom 19 févr. 2020 à 14:59