Wewnątrz mojej funkcji buduję zestaw wyników, wypełniając nową zmienną HashMap danymi (jeśli jest lepszy sposób - doceniam komentarze). Następnie chciałbym zwrócić zestaw wyników jako niezmienną HashMap. Jak uzyskać niezmienny od zmiennego?Jak przekonwertować zmienną HashMap na niezmienny odpowiednik w Scali?
Odpowiedz
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)
lub
scala> collection.immutable.HashMap(m.toSeq:_*)
res2: scala.collection.immutable.HashMap[Int,Int] = Map(1 -> 2, 3 -> 4)
Dyskusja o powrocie immutable.Map
Vs. immutable.HashMap
Niezależnie od tego, co po prostu stosując metodę 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)
Począwszy od 2,9, to wykorzystuje metodę toMap
w TraversableOnce
, który jest realizowany w następujący sposób:
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
}
Dzięki za wprowadzenie "Map.newBuilder". Zwykle używałem map zmiennych do konstrukcji niezmiennych. – akauppi
Czy są jakieś namacalne różnice? Zawsze zastanawiałem się, czy 'newBuilder' zachowuje tylko jedną kopię danych w pamięci czy wykonuje pełną kopię danych na' .result', co wymaga dwukrotnej ilości pamięci? – matanster
Możesz sprawdzić [źródło] (https://github.com/scala/scala/blob/v2.11.7/src/library/scala/collection/mutable/MapBuilder.scala): 'MapBuilder.result' po prostu zwraca' elems', więc nie tworzy nowej kopii. Z tego wynika, że jest to dokładnie to samo, co operacja '+' w kolekcji * immutable *, i nie dotyczy * kolekcji * mutable *. – ebruchez
Jeśli masz mapę: logMap: Map[String, String]
prostu trzeba zrobić: logMap.toMap()
- 1. Jak przekonwertować java.util.Collections.unmodifiableMap na niezmienny Scala Map?
- 2. Konwertuj tablicę na zmienny zestaw w Scali?
- 3. Jak przekonwertować HashMap na json Array w systemie Android?
- 4. Jak przekonwertować HashMap do tablicy wpisów
- 5. Jak przekonwertować Array na HashMap za pomocą Java 8 Stream
- 6. Jak przekonwertować liczbę całkowitą na zmienną w Delphi?
- 7. Tensorflow: Jak przekonwertować tensor skalarny na zmienną skalarną w pythonie?
- 8. Utwórz HashMap w Scali z listy obiektów bez zapętlenia
- 9. Nie można przekonwertować z podwójnej na zmienną
- 10. Interpolacja łańcuchów znaków w Scali 2.10 - Jak interpolować zmienną String?
- 11. przekonwertować obiekt [] z zestawu kluczy hashmap na ciąg []?
- 12. Jak mogę przekonwertować mapę map Java do użycia w Scali?
- 13. Jak przekonwertować mod_rewrite (opcja QSA) na odpowiednik Nginx?
- 14. HashMap w HashMap
- 15. Jaki jest odpowiednik mapy mieszkalnej Scali w Guava?
- 16. Jak przekonwertować ciąg na bitset?
- 17. Hashable, niezmienny
- 18. Jak przekonwertować SparseArray na ArrayList?
- 19. Odpowiednik do notacji Haskella lub Wyrażeń obliczeniowych F # w Scali?
- 20. przekonwertować dowolny typ w Scali do Array [Byte] iz powrotem
- 21. Jak przekonwertować mapę HashMap na ciąg znaków K/V w języku Java 8 ze strumieniami
- 22. Jak dopasować wzór na typowy w Scali?
- 23. Jak przekonwertować Char na Float
- 24. Jak przekonwertować DataInputStream na ciąg w Javie?
- 25. Jak przekonwertować Int na NSData w Swift?
- 26. Konwertowanie HashMap na ArrayList
- 27. Jak przekonwertować wartość całkowitą na ciąg?
- 28. Jak przekonwertować ciąg do daty w Scala?
- 29. Wyszukaj HashMap w ArrayList of HashMap
- 30. Jak podzielić HashMap w Javie
Ale wynik jest 'immutable.Map', a nie' immutable.HashMap' wtedy! Funkcja ma na celu zwrócenie 'immutable.HashMap'. – Ivan
Możesz określić, jaki typ chcesz. Jeśli chcesz, aby typ był 'Mapą', wykonaj' Map() ++ m' – dhg
Chcę 'immutable.HashMap', ale' immutable.HashMap ++ m' (gdzie 'm' jest' mutable.HashMap') zwraca 'immutable.Map'. – Ivan