Как обновить каждое значение набора ключей в LinkedHashMap в Scala, имея LinkedHashMap[Int, ListBuffer[Int]]?

У меня есть LinkedHashMap типа:

var map: LinkedHashMap[Int, ListBuffer[Int]] = ((1 -> (2, 1)), (2 -> 2), (3 -> (5, 3)))

Я хочу добавить элемент в каждый список каждого ключа, скажем, я хочу добавить "6", чтобы иметь:

((1 -> (6, 2, 1)), (2 -> (6, 2)), (3 -> (6, 5, 3)))

Как мне это сделать?

1 ответ

Решение

Как это:

val map: mutable.LinkedHashMap[Int, ListBuffer[Int]] =
  mutable.LinkedHashMap(1 -> ListBuffer(2, 1),
                        2 -> ListBuffer(2, 2),
                        3 -> ListBuffer(5, 3))

val res = map.mapValues(lstBuffer => lstBuffer += 6)
println(res)

Урожайность:

Map(1 -> ListBuffer(2, 1, 6), 2 -> ListBuffer(2, 2, 6), 3 -> ListBuffer(5, 3, 6))

Обратите внимание, что mapValues ленив и не будет казнен, пока не осуществится. Если мы хотим сделать это строгим и выполнить немедленно, мы можем использовать map:

val res = map.map { case (_, lstBuffer) => lstBuffer += 6 }

Если вы хотите подготовить, используйте .prepend вместо этого (который возвращает Unit и оказывает побочное влияние на текущий Map пример):

map.foreach { case (_, lstBuffer) => lstBuffer.prepend(6) }

Я хочу отметить, что обычно, если вы хотите перебрать всю Map[K, V] последовательно, это признак того, что вы используете неправильную структуру данных. Хотя без дополнительной информации я не могу установить основание для этой гипотезы.

Другие вопросы по тегам