排序序列[scala.collection.immutable.map[string,org.joda.time.datetime]]

woobm2wo  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(601)

我有scala中的seqMap,它来自hive分区。
我需要从下面的Map序列中获取最新/最新业务日期

import org.joda.time.DateTime

val a = Seq(
 Map("businessdate" -> DateTime.parse("2018-03-23T00:00:00.000Z")),
 Map("businessdate" -> DateTime.parse("2018-03-24T00:00:00.000Z")),
 Map("businessdate" -> DateTime.parse("2018-03-22T00:00:00.000Z")),
 Map("businessdate" -> DateTime.parse("2018-03-21T00:00:00.000Z"))
)

预期输出与最近的业务日期对应。即

Map("businessdate" -> DateTime.parse("2018-03-24T00:00:00.000Z")

我试着用 sortWith 但结果却是错误的

val b = a.map(x => new DateTime( x.get("businessdate").get)
  .isAfter(new DateTime( x.get("businessdate").get)))
println(b)

我刚到斯卡拉。感谢您的帮助。

vxbzzdmp

vxbzzdmp1#

使用 sortWith 要获取最近的业务日期:

val mapWithMostRecentBusinessDate = a.sortWith(
  (a, b) => a("businessdate").isAfter(b("businessdate"))
).head

println(mapWithMostRecentBusinessDate)

输出: Map(businessdate -> 2018-03-24T00:00:00.000Z) 另一种使用 foldLeft ,可能比排序整个 Seq 自o(n):

val mapWithMostRecentBusinessDate = a.foldLeft(a.head)(
  (acc, b) =>
    if (b("businessdate").isAfter(acc("businessdate")))
      b
    else
      acc
)

println(mapWithMostRecentBusinessDate)

输出: Map(businessdate -> 2018-03-24T00:00:00.000Z)

相关问题