我有这样的事情:
case class Range(start: String, end: String)
List("s1", "s2", "s3", "s4")
我希望得到:
List(Range("s1","s2"), Range("s2","s3"), Range("s3", "s4"))
我肯定可以使用经典的基于java的解决方案,但我寻找更优雅的东西。
答案 0 :(得分:2)
这符合您的期望
list.sliding(2).collect { case List(from, to) => Range(from, to) }.toList
res0: List[Range] = List(Range(s1,s2), Range(s2,s3), Range(s3,s4))
这是另一个选项
(list zip list.tail) map Range.tupled
答案 1 :(得分:1)
这是一个简单的解决方案,无论您的数据类型如何(您可以将其映射到您想要的任何内容)都可以使用:
scala> val l = List("s1", "s2", "s3", "s4")
l: List[String] = List(s1, s2, s3, s4)
scala> l.dropRight(1) zip l.drop(1)
res4: List[(String, String)] = List((s1,s2), (s2,s3), (s3,s4))
干杯