Agrupando itens da lista comparando-os com seus vizinhos

Qual é a maneira mais elegante de agrupar uma lista de valores em grupos com base nos valores vizinhos?

O contexto mais amplo que tenho é ter uma lista de linhas, que precisam ser agrupadas em parágrafos. Quero poder dizer que, se a diferença vertical entre duas linhas for menor que o limite, elas estarão no mesmo parágrafo.

Acabei resolvendo esse problema de maneira diferente, mas estou pensando na solução correta aqui.

case class Box(y: Int)
val list = List(Box(y=1), Box(y=2), Box(y=5))

def group(list: List[Box], threshold: Int): List[List[Box]] = ???

val grouped = group(list, 2)
> List(List(Box(y=1), Box(y=2)), List(Box(y=5)))

Eu olheigroupBy(), mas isso só pode funcionar com um elemento de cada vez. Eu também tentei uma abordagem que envolvia diferenças pré-computacionais usandosliding(), mas fica difícil recuperar os elementos da coleção original.