В 2.8 вы, вероятно, будете использовать методы:
scala> val a = "ABCDEF".toList.map(_.toString)
a: List[java.lang.String] = List(A, B, C, D, E, F)
scala> a.grouped(2).partialMap{ case List(a,b) => (a,b) }.toList
res0: List[(java.lang.String, java.lang.String)] = List((A,B), (C,D), (E,F))
(Это 2.8.0 Beta1; последний транк имеет collect
вместо partialMap
.)
В 2.7 - и неплохо занял второе место в 2.8 - вы можете создать рекурсивный метод, как сделал Legoscia:
def zipPairs[A](la : List[A]): List[(A,A)] = la match {
case a :: b :: rest => (a,b) :: zipPairs(rest)
case _ => Nil
}
scala> zipPairs(a)
res1: List[(java.lang.String, java.lang.String)] = List((A,B), (C,D), (E,F))
Редактировать: вот еще один краткий подход, который также работает на 2.7:
scala> (a zip a.drop(1)).zipWithIndex.filter(_._2 % 2 == 0).map(_._1)
res2: List[(java.lang.String, java.lang.String)] = List((A,B), (C,D), (E,F))
(обратите внимание на использование drop(1)
вместо tail
, поэтому он работает с пустыми списками.)