Scala 分组依据并从 List[String] 中查找最小值和最大值



我在 Scala 中遵循了值列表,并希望按这些值进行分组,以便我可以获取每个特定日期每个值的最小和最大时间戳:-

val data = List( (123 , 2018-04-30 10:15:30),
(123 , 2018-04-30 11:15:30),
(123 , 2018-04-30 12:22:30),
(223 , 2018-04-22 10:15:30),
(223 , 2018-04-22 13:15:30))

我希望输出为

List((123, 2018-04-30, 2018-04-30 10:15:30 , 2018-04-30 12:22:30),
(223, 2018-04-22, 2018-04-22 10:15:30 , 2018-04-30 13:15:30))

希望这能澄清我的疑问

谢谢

假设您以 List[String] 的形式传入数据

    val data = List(
  ("123 , 2018-04-30 10:15:30"),
  ("123 , 2018-04-30 11:15:30"),
  ("123 , 2018-04-30 12:22:30"),
  ("223 , 2018-04-22 10:15:30"),
  ("223 , 2018-04-22 13:15:30")
)

并且您的数据的日期始终以 yyyy-MM-dd HH:mm:ss 的形式出现,然后您可以创建一个函数,该函数将接收此列表作为输入并输出另一个列表,该列表将包含所需格式的数据。

您的函数如下

def func(data: List[String]): List[String] = {
  val formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
  data.map {
    x =>
      (x.split(",")(0), formatter.parse(x.split(",")(1)))
  }.groupBy(_._1).map {
    y =>
      y._1 + " , " + formatter.format(y._2.map(_._2).min) + " , " + formatter.format(y._2.map(_._2).max)
  }.toList
}

如果调用函数func(data),则将在列表表单中获得输出

List(223 , 2018-04-22 10:15:30 , 2018-04-22 13:15:30, 123 , 2018-04-30 10:15:30 , 2018-04-30 12:22:30) .

希望这能解决您的查询!!

最新更新