Dentro de una función mía construyo un conjunto de resultados llenando un nuevo HashMap mutable con datos (si hay una manera mejor, agradecería los comentarios). Entonces me gustaría devolver el conjunto de resultados como un HashMap inmutable. ¿Cómo derivar un inmutable de un mutable?Cómo convertir un HashMap mutable en un equivalente inmutable en Scala?
Respuesta
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)
discusión acerca de regresar immutable.Map
vs immutable.HashMap
no obstante, ¿qué pasa con el simple uso de la toMap
método:
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)
A partir de 2,9, este utiliza el método toMap
en TraversableOnce
, que se implementa de la siguiente manera:
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
}
Gracias por introducir 'Map.newBuilder'. Normalmente usé mapas mutables solo para la construcción de mapas inmutables. – akauppi
¿Hay alguna diferencia tangible? Siempre me pregunté si 'newBuilder' conserva solo una copia de los datos en la memoria o realiza una copia completa de los datos en' .result', por lo que requiere el doble de la cantidad de memoria. – matanster
Puede consultar la [fuente] (https://github.com/scala/scala/blob/v2.11.7/src/library/scala/collection/mutable/MapBuilder.scala): 'MapBuilder.result' simplemente devuelve' elems', por lo que no crea una nueva copia. A partir de esto, entiendo que esto es exactamente lo mismo que hacer una operación '+' en la colección * inmutable *, y no está involucrada ninguna colección * mutable *. – ebruchez
Si tienes un mapa: logMap: Map[String, String]
sólo tiene que hacer: logMap.toMap()
- 1. Convertir mutable a mapa inmutable
- 2. ¿Cómo inicializar un hashmap inmutable de Scala con valores?
- 3. Scala: Mutable vs. Inmutable Object Performance - OutOfMemoryError
- 4. mutable vs. inmutable en las colecciones de Scala
- 5. ¿Convertir una matriz a un conjunto mutable en Scala?
- 6. Inmutable vs Mutable C#
- 7. Clase mutable o inmutable?
- 8. Contenedor inmutable con contenido mutable
- 9. Python scoping mutable vs inmutable
- 10. Sin lista mutable de Scala
- 11. Cómo crear un mapa ordenado en scala?
- 12. Cómo convertir Sec inmutable a la SEC mutable con hasta bucle
- 13. Scala Inmutable MultiMap
- 14. copiar el contenido de un mapa inmutable al nuevo mapa mutable
- 15. La última palabra en NSStrings: mutable e inmutable
- 16. ¿Hay un equivalente a SuppressWarnings en Scala?
- 17. conjunto de Scala mutable e inmutable cuándo usar Val y var
- 18. Scala: Uso de HashMap con un valor predeterminado
- 19. Iteración sobre un HashMap de HashMaps en Java (o Scala)
- 20. Buscar un HashMap en un ArrayList de HashMap
- 21. ¿Cómo obtener una colección inmutable de java HashMap?
- 22. scala hashmap valores múltiples
- 23. clase mutable como hijo de una clase inmutable
- 24. ¿Cuál es la diferencia entre mutable e inmutable?
- 25. Cómo convertir JSON a un tipo en Scala
- 26. Cacao: ¿Pruebas para encontrar si un NSString es inmutable o mutable?
- 27. Scala convertir un iterador [Opción [T]] en un iterador [T]
- 28. Convertir HashMap.toString() a HashMap en Java
- 29. ¿Cómo se define un pedido en Scala?
- 30. cómo convertir un objeto dict python a un objeto equivalente java?
Pero el resultado es un 'immutable.Map', no un' immutable.HashMap' entonces! La función está destinada a devolver 'inmutable.HashMap'. – Ivan
Puede especificar el tipo que desee. Si quieres que el tipo sea 'Map', haz' Map() ++ m' – dhg
Quiero 'inmutable.HashMap', pero' inmutable.HashMap ++ m' (donde 'm' es un' mutable.HashMap') devuelve 'inmutable.Map'. – Ivan