Как обновить каждое значение набора ключей в 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]
последовательно, это признак того, что вы используете неправильную структуру данных. Хотя без дополнительной информации я не могу установить основание для этой гипотезы.