All'interno di una mia funzione costruisco un set di risultati riempiendo una nuova HashMap mutabile con i dati (se c'è un modo migliore - apprezzerei i commenti). Quindi mi piacerebbe restituire il set di risultati come immutabile HashMap. Come derivare un immutabile da un mutabile?Come convertire una HashMap mutabile in un equivalente immutabile in Scala?
risposta
scala> val m = collection.mutable.HashMap(1->2,3->4)
m: scala.collection.mutable.HashMap[Int,Int] = Map(3 -> 4, 1 -> 2)
scala> collection.immutable.HashMap() ++ m
res1: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2, 3 -> 4)
o
scala> collection.immutable.HashMap(m.toSeq:_*)
res2: scala.collection.immutable.HashMap[Int,Int] = Map(1 -> 2, 3 -> 4)
Discussione di tornare immutable.Map
vs immutable.HashMap
nonostante, che dire semplicemente utilizzando il metodo toMap
:
scala> val m = collection.mutable.HashMap(1 -> 2, 3 -> 4)
m: scala.collection.mutable.HashMap[Int,Int] = Map(3 -> 4, 1 -> 2)
scala> m.toMap
res22: scala.collection.immutable.Map[Int,Int] = Map(3 -> 4, 1 -> 2)
Come di 2,9, questo metodo utilizza il toMap
in TraversableOnce
, che è implementato come segue:
def toMap[T, U](implicit ev: A <:< (T, U)): immutable.Map[T, U] = {
val b = immutable.Map.newBuilder[T, U]
for (x <- self)
b += x
b.result
}
Grazie per aver introdotto "Map.newBuilder". Di solito ho usato mappe mutevoli solo per la costruzione di quelle immutabili. – akauppi
C'è qualche differenza tangibile? Mi sono sempre chiesto se 'newBuilder' conserva una sola copia dei dati in memoria o esegue una copia completa dei dati su' .result', richiedendo quindi il doppio della quantità di memoria? – matanster
È possibile controllare il [fonte] (https://github.com/scala/scala/blob/v2.11.7/src/library/scala/collection/mutable/MapBuilder.scala): 'MapBuilder.result' restituisce solo' elems', quindi non crea una nuova copia. Da questo ho capito che questo è esattamente lo stesso che fare un'operazione '+' nella raccolta * immutable *, e non è coinvolta alcuna raccolta * * mutable *. – ebruchez
Se si dispone di una mappa: logMap: Map[String, String]
solo bisogno di fare: logMap.toMap()
- 1. Convertire file Bitmap immutabile per Bitmap mutabile
- 2. Come inizializzare una scala hashmap immutabile con valori?
- 3. Impossibile prendere in prestito il contenuto mutuo immutabile come mutabile
- 4. Come si converte una java.util.Collections.unmodifiableMap in una Scala Map immutabile?
- 5. Perché toSeq di Scala converte un Set immutabile in un ArrayBuffer mutabile?
- 6. Ambito virile mutabile vs immutabile
- 7. Come sovrascrivere una variabile mutabile in Tratto in scala?
- 8. Valore mutabile predefinito da HashMap
- 9. Come creare una mappa ordinata in scala?
- 10. Come convertire stringa in HashMap in Java
- 11. Objective-C HashMap equivalente
- 12. L'ultima parola su NSStrings: Mutabile e Immutabile
- 13. Quale elenco di scala mutabile usare?
- 14. .pop() equivalente in scala
- 15. Scala Immutabile MultiMap
- 16. Come trasformare una raccolta mutevole in una immutabile
- 17. set mutabile e immutabile di scala quando usare val e var
- 18. Esiste una coda di priorità immutabile mantenuta in Scala?
- 19. Impossibile prendere in prestito una variabile perché non posso prendere in prestito una variabile locale immutabile come mutabile
- 20. Convertire HashMap.toString() su HashMap in Java
- 21. Esiste un equivalente a SuppressWarnings in Scala?
- 22. Iterazione su una HashMap di HashMaps in Java (o Scala)
- 23. scala hashmap valori multipli
- 24. Thread: trasformazione sicura di un valore in una mappa mutabile
- 25. Come convertire un carattere in un valore Enum System.Windows.Input.Key equivalente?
- 26. Convertire una parte di JSON in HashMap usando Jackson ObjectMapper
- 27. Scala richiedono) equivalente in Kotlin
- 28. Scala Map vs HashMap
- 29. Variabile mutevole vs raccolta mutabile
- 30. Scala: utilizzo di HashMap con un valore predefinito
Ma il risultato è un 'immutable.Map', non un' immutable.HashMap' allora! La funzione ha lo scopo di restituire 'immutable.HashMap'. – Ivan
È possibile specificare qualunque tipo si desideri. Se vuoi che il tipo di essere 'Map', fare' Mappa() ++ M' – dhg
voglio 'immutable.HashMap', ma' immutable.HashMap ++ M' (dove 'M' è un' mutable.HashMap' restituisce 'immutable.Map'. – Ivan