Вот один из способов сделать это с неизменными картами. Я не знаю, как выглядят ваши потоки, но, возможно, это можно изменить в соответствии с вашими потребностями:
object Example {
def update[K, V](m: Map[K, V])(s: Stream[(K, V)]): Map[K, V] = s match {
case (k, v) #:: kvs => update(m.updated(k, v))(kvs)
case _ => m
}
def main(args: Array[String]): Unit = {
val s1 = Stream(("b", "2"), ("c", "3"))
val s2 = Stream(("a", "100"))
val m = Map("a" -> "1")
println(update(m)(s1)) //appends
println(update(m)(s2)) //replaces
}
}
Main печатает следующее:
Map(a -> 1, b -> 2, c -> 3)
Map(a -> 100)