У меня есть следующий код Scala, который подсчитывает количество целых чисел в [0, 3000000) с количеством битов c для каждого возможного c.
(0 until 3000000)
.map(java.lang.Integer.bitCount)
.groupBy(x => x)
.map(x => (x._2.length, x._1))
.foreach(println)
Код выводит все правильно, за исключением того, что он не может вывести кортеж, соответствующий c = 0 . См. Ниже.
(413512,9)
(8086,17)
......
(23,20)
(278594,8)
Однако, если я изменю код, добавив фильтр после groupBy
следующим образом:
(0 until 3000000)
.map(java.lang.Integer.bitCount)
.groupBy(x => x)
.filter(_._1 == 0)
.map(x => (x._2.length, x._1))
.foreach(println)
, он сможет вывести кортеж (1, 0)
.
Вопрос: Интересно, что здесь происходит? Кажется, что в первом фрагменте кода map
не перечисляет все элементы в результате groupBy
. Это ошибка библиотеки Scala?