Вы не знаете, как вернуть неизменяемую карту, потому что вы не можете изменить ее после ее создания? Это вопрос?
Много способов. Например:
(1 to 10).map {
case x if x%2 == 0 => (x -> "even")
case x => (x -> "odd")
}.toMap
Выше возвращается обычный Map
, а не ListMap
. Я не уверен, почему вы хотите последнее, но, если вы по какой-то причине, это немного больше вовлечено:
val tuples = (1 to 10).map {
case x if x%2 == 0 => (x -> "even")
case x => (x -> "odd")
}
ListMap(tuples:_*)
Да, вы также можете отказаться от понимания (я не уверен, почему вы хотели бы в этом случае), например:
val tuples = for {
x <- 1 to 10
kind = if (x %2 == 0) "even" else "odd"
} yield (x -> kind)
Это делает то же самое, что и map
вызов выше.
Вы также можете начать с ListMap
, чтобы избежать преобразования в конце:
ListMap((1 to 10).map(_ -> ""):_*).map {
case (k, _) if k%2 == 0 => k -> "even"
case (k, _) => k -> "odd"
}
Или просто:
ListMap(
(1 to 10).map {
case x if x%2 == 0 => x -> "even"
case x => x -> "odd"
}:_*
)
Существует также .foldLeft
, который позволяет вам записать его таким образом, который больше всего напоминает то, что у вас есть в настоящее время, в том смысле, что он постепенно накапливает изменения на карте, а не выполняет одно преобразование в конце ... не знаю, почему вы этого хотите, хотя это наименее эффективный способ:
(1 to 10).foldLeft(ListMap.empty[Int, String]) {
case (x, map) if x%2 == 0 => map.updated(x, "even")
case (x, map) => map.updated(x, "odd")
}