According to scaladoc, sliding() returns…
“An iterator producing iterable collections of size size, except the last and the only element will be truncated if there are fewer elements than size.”
For me, intuitivelly, sliding(n) would return a sliding window of n elements if available. With the current implementation, I need to perform an extra check to make sure I don’t get a list of 1 or 2 elements.
scala> val xs = List(1, 2)
xs: List[Int] = List(1, 2)
scala> xs.sliding(3).toList
res2: List[List[Int]] = List(List(1, 2))
I expected here an empty list instead. Why is sliding() implemented this way instead?
It was a mistake, but wasn’t fixed as of 2.9. Everyone occasionally makes design errors, and once one gets into the library it’s a nontrivial task to remove it.
Workaround: add a filter.