Scala group by并从List [String]中找到min和max

时间:2018-04-30 12:51:21

标签: scala

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

Console.ReadKey()

我希望输出为

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

希望这能澄清我的疑问

谢谢,

1 个答案:

答案 0 :(得分:1)

让我们假设您以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)

希望这能解决您的疑问!!!