Je veux juste demander pourquoi mon hashmap code> insère la même valeur même si je le pose à l'intérieur d'une boucle?
val parentMap = HashMap<String, Any?>()
val map = HashMap<String, Any?>()
orders.forEachIndexed { i, order ->
map["id"] = order.id
map["productName"] = order.productName
map["quantity"] = order.quantity
Log.i(TAG, "order=$order")
parentMap["data$i"] = map
Log.i(TAG, "map=$parentMap") // This parent map contains a same value from map...
}
Log.i(TAG, "map=$parentMap")
4 Réponses :
Donc, ce que vous faites ici consiste à attribuer l'objet de la carte à votre carte mère. La carte mère stocke l'objet de la carte dans son ensemble au lieu des données. Vous devrez créer une nouvelle "carte" dans chaque itération. p>
Je pense que "carte" peut être une variable de référence. donc il insérera les mêmes valeurs p>
Pour résumer ce que tout le monde a dit ici.
dans Java et Kotlin Tous les objets stockés dans un tas et toutes vos variables stockent uniquement Lorsque vous faites ceci: Votre clé, ex: donc tout ce que vous faites à votre carte: p> ne change qu'une seule carte que vous avez. p> Pour résoudre ce problème. Mettez votre création de carte dans la boucle.
Ou je vous suggère d'utiliser un style immuable comme: p> parentmap ["Data $ i"] = mappe code> p>
data1 code>,
data2 < / Code>,
data3 code> ... Pointera une instance de la même carte que vous avez créée ici:
Val Map = HashMap
Vous créez l'objet de la carte en dehors de la boucle. P>
VAL MAP = HASHMAP () P> blockQuote>
Donc, il créera une entrée de carte unique où vous avez besoin d'une carte différente pour la carte mère. P>
Maintenant, vous entrez des valeurs différentes sur votre carte, mais que toutes les références de cartes sont maintenant dirigées vers le même objet de la carte afin que toutes les cartes de votre carte mère afficheront les dernières entrées apportées à la carte. P>
La solution consiste à garder Val Map = Hashmap () à l'intérieur de la boucle. Donc, avec chaque itération, différents objets de carte seront créés entraînant différentes données selon les itérations. P>
Mettez la carte
val = hashmap () code> boucle intérieure