Agrupando elementos de la lista comparándolos con sus vecinos

¿Cuál es la forma más elegante de agrupar una lista de valores en grupos en función de sus valores vecinos?

El contexto más amplio que tengo es tener una lista de líneas, que deben agruparse en párrafos. Quiero poder decir que si la diferencia vertical entre dos líneas es inferior al umbral, están en el mismo párrafo.

Terminé resolviendo este problema de manera diferente, pero me pregunto cuál es la solución correcta aquí.

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)))

He miradogroupBy(), pero eso solo puede funcionar con un elemento a la vez. También probé un enfoque que incluía diferencias previas a la computación utilizandosliding(), pero luego resulta incómodo recuperar los elementos de la colección original.