scala:范围列表的日期列表

时间:2016-06-15 19:58:31

标签: scala

我有这样的事情:

case class Range(start: String, end: String)
List("s1", "s2", "s3", "s4")

我希望得到:

List(Range("s1","s2"), Range("s2","s3"), Range("s3", "s4"))

我肯定可以使用经典的基于java的解决方案,但我寻找更优雅的东西。

2 个答案:

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

干杯