我需要在两列上执行比较操作(例如大于或小于),列中包含n个值(值只是时间戳),我的结果也应该在列表中。
我该怎么做这个操作?
输入:
Date1 Date2
["2016-11-24 12:06:47"] ["2017-10-04 03:30:23"]
["null"] []
["2017-01-25 10:07:25","2018-01-25 10:07:25"] ["2017-09-15 03:30:16","2017-09-15 03:30:16"]
输出应为:
Result
["Less"]
["Not Okay"]
["Less","Great"]
答案 0 :(得分:0)
我需要执行比较操作
您似乎正在寻找.compareTo
运营商:
scala> "a".compareTo("b")
res: Int = -1
scala> "a".compareTo("a")
res: Int = 0
scala> "b".compareTo("a")
res: Int = 1
使用上面提到的第一个例子:
val date1 = "2016-11-24 12:06:47"
val date2 = "2017-10-04 03:30:23"
scala> date1.compareTo(date2)
res: Int = -1
如果我们暂时忽略"Not Okay"
个案,我们可以使用以下函数实现"Less"
或"Great"
个案:
def compareLexicographically(s1: String, s2: String): String = s1.compareTo(s2) match {
case -1 => "Less"
case _ => "Great"
}
看看你的例子,我假设行是字符串列表的元组:
val rows: List[(List[String], List[String])] =
List((
List("2016-11-24 12:06:47"),
List("2017-10-04 03:30:23")
),
(
List("2017-01-25 10:07:25", "2018-01-25 10:07:25"),
List("2017-09-15 03:30:16", "2017-09-15 03:30:16")
))
我首先zip
列中的元素获取List[(String, String)]
rows.flatMap(r => r._1.zip(r._2))
然后使用map
简单compareLexicographically
:
scala> rows.flatMap(r => r._1.zip(r._2)).map((compareLexicographically _).tupled)
res: List[String] = List(Less, Great, Great)