Scala лучший способ превратить Коллекцию в Карту под ключ? - PullRequest
146 голосов
/ 23 марта 2009

Если у меня есть коллекция c типа T и есть свойство p для T (скажем, типа P), как лучше всего создать карту -по-извлечения ключа

val c: Collection[T]
val m: Map[P, T]

Один из способов заключается в следующем:

m = new HashMap[P, T]
c foreach { t => m add (t.getP, t) }

Но теперь мне нужна изменяемая карта. Есть ли лучший способ сделать это так, чтобы он был в 1 строке, и я получаю неизменную карту? (Очевидно, я мог бы превратить вышесказанное в простую библиотечную утилиту, как в Java, но я подозреваю, что в Scala нет необходимости)

Ответы [ 11 ]

0 голосов
/ 25 февраля 2015

Это работает для меня:

val personsMap = persons.foldLeft(scala.collection.mutable.Map[Int, PersonDTO]()) {
    (m, p) => m(p.id) = p; m
}

Карта должна быть изменяемой, а Карта должна быть возвращена, поскольку добавление в изменяемую Карту не возвращает карту.

...