В принципе, вы можете collect
только те A
s, где последовательность не пуста, и с тех пор конвертировать ее в значение, которое одновременно является конструктивным доказательством не пустота последовательности:
def groupByHead(as: Seq[A]) =
as.collect { case a @ A(h +: t) => (h, a) }.groupBy(_._1).mapValues(_.map(_._2))
но это выглядит немного искусственно. В данном конкретном случае «небезопасные» .head
кажутся меньшим злом, между filter
и groupBy
.
мало что может пойти не так.