.mapValues
является ленивым, что означает, что функция, которую вы даете ему, выполняется каждый раз, когда вы получаете доступ к значению, поэтому, когда вы делаете groupedMap(1) += 99
, она запускает ваше преобразование, возвращает Set
, к которому вы добавили 99, и отбрасывает его .
Затем, когда вы печатаете его, он снова запускает преобразование ... и печатает оригинальное содержимое.
Если приведенное выше неочевидно, попробуйте запустить этот фрагмент в качестве иллюстрации:
val foo = Map("foo" -> "bar")
.mapValues { _ => println("mapValues"); "baz" }
println(foo("foo") + foo("foo"))
Это одна из многих проблем, с которыми вы сталкиваетесь при использовании изменяемых данных. Не делай этого. В 99% случаев использования в scala это не нужно. Таким образом, лучше всего делать вид, что его вообще не существует, пока вы не получите достаточно понимания языка, чтобы иметь возможность окончательно определить оставшийся 1%.