scala - 比较具有 n 个值的列表的两列,并将数据保存为 scala 中的列表
问题描述
我需要对具有 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"]
解决方案
我需要进行比较操作
看来您正在寻找.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"
or"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)
推荐阅读
- mysql - 在 INSERT 期间使用 SELECT 作为值时的并发性
- flutter - 颤振中的屏幕导航
- c# - 如何为由字符串和 int32 集合组成的对象编写 GetHashCode 方法?
- python - 从 JSON 文件中提取某些值(python)
- python - Pandas 将引用数值列的分类列更改为几列
- spring - 在 Spring Security 中编辑静态用户
- javascript - 将 python 变量添加到 jinja 计数器
- kubernetes - 如何在 kubernetes 的 traefik 入口控制器中设置最大请求正文大小?
- java - 使用 Oracle JDBC 驱动程序关闭休眠会话时,Oracle 泄漏线程
- flutter - Flutter Paint:如何构建复杂切割形状的进度条?(见图)