我在scala中有Seq of Map,它来自hive分区。
我需要从以下Seq of Map
获取最新/ recentbusinessdateimport 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
对此seq的地图进行排序,但结果却是错误的结果
val b = a.map(x => new DateTime( x.get("businessdate").get)
.isAfter(new DateTime( x.get("businessdate").get)))
println(b)
我是scala的新手。任何帮助表示赞赏。
答案 0 :(得分:2)
使用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)