Скажем, у меня есть некоторые данные в послед в Scala 2.10.2, например:Scala Collection Конкретная реализация
scala> val data = Seq(1, 2, 3, 4, 5)
data: Seq[Int] = List(1, 2, 3, 4, 5)
Теперь я выполнить некоторые операции и преобразовать его в карту
scala> val pairs = data.map(i => i -> i * 2)
pairs: Seq[(Int, Int)] = List((1,2), (2,4), (3,6), (4,8), (5,10))
scala> val pairMap = pairs.toMap
pairMap: scala.collection.immutable.Map[Int,Int] = Map(5 -> 10, 1 -> 2, 2 -> 4, 3 -> 6, 4 -> 8)
сейчас скажем, по соображениям производительности, я бы хотел, чтобы pairMap
использовал HashMap
исполнение Map
. Каков наилучший способ достичь этого?
Пути Я рассмотрел:
Кастинг:
pairMap.asInstanceOf[scala.collection.immutable.HashMap[Int,Int]]
Это кажется немного ужасным.
вручную преобразования:
var hm = scala.collection.immutable.HashMap[Int,Int]() pairMap.foreach(p => hm += p)
Но это не очень функциональны.
Использование строитель
scala.collection.immutable.HashMap[Int,Int](pairMap.toSeq:_*)
Это работает, но это не самый читаемый фрагмент кода.
Есть ли лучший способ, который мне не хватает? Если нет, то какой из них лучше всего подходит?
ОК, спасибо. Требование производительности было примером; в общем, это лучший способ получить более конкретную коллекцию? – paulmdavies
Да, это так. Тем не менее, вы должны всегда передавать наиболее общий интерфейс в своей кодовой базе, чтобы избежать ненужных изменений при выборе другого базового типа. (в Эффективной Скале щебета: http://twitter.github.io/effectivescala/) – Nate
Естественно. Иногда, например, использование 'SortedMap' может быть полезно в данной ситуации, например! – paulmdavies