Scala - 地图的groupBy键
Scala - groupBy keys of a map
所以我有一个 Map [Long,Int]
类型的简单地图。
我在地图中的键是时间戳类型,如下所示 (1446462630,1446462640,1446462650) 是我的地图的键。
1446462630 = which is 11/02/2015 11:10:30(Epoch time in sceonds)
1446462640 = which is 11/02/2015 11:10:40(..)
1446462650 = which is 11/02/2015 11:10:50(..)
我的地图如下
1446462630->2
1446462640->1
1446462650->3
所以现在我想显示 11:10 和 11:11 之间按分钟分组的累计计数结果,所以我的输出将是
1446462600 -> 6
1446462600(2015 年 2 月 11 日的分钟转换 11:10)
我怎样才能做到这一点?
P.S 我试过了 myMap.groupBy{ _._1 / (60))
还是不行?关于如何在 scala 中实现这个的任何建议?
提前致谢。
你快到了:
myMap.groupBy{ _._1 / (60)).map {case (sec, map) => sec -> map.values.sum}
还要考虑转化的 TimeUnit 使用情况。对于您的情况:
TimeUnit.SECONDS.toMinutes(_._1)
这是一个类似于 nyavro 的答案,但针对您的情况使用了过滤器。
myMap.groupBy(_._1/60).filterKeys(key =>
key >= 1446462600/60 && key <= 1446462600/60+60
).map{
case (k, v) => k*60 -> v.map(_._2).sum
}
res1: scala.collection.immutable.Map[Int,Int] = Map(1446462600 -> 6)
所以我有一个 Map [Long,Int]
类型的简单地图。
我在地图中的键是时间戳类型,如下所示 (1446462630,1446462640,1446462650) 是我的地图的键。
1446462630 = which is 11/02/2015 11:10:30(Epoch time in sceonds)
1446462640 = which is 11/02/2015 11:10:40(..)
1446462650 = which is 11/02/2015 11:10:50(..)
我的地图如下
1446462630->2
1446462640->1
1446462650->3
所以现在我想显示 11:10 和 11:11 之间按分钟分组的累计计数结果,所以我的输出将是
1446462600 -> 6
1446462600(2015 年 2 月 11 日的分钟转换 11:10)
我怎样才能做到这一点?
P.S 我试过了 myMap.groupBy{ _._1 / (60))
还是不行?关于如何在 scala 中实现这个的任何建议?
提前致谢。
你快到了:
myMap.groupBy{ _._1 / (60)).map {case (sec, map) => sec -> map.values.sum}
还要考虑转化的 TimeUnit 使用情况。对于您的情况:
TimeUnit.SECONDS.toMinutes(_._1)
这是一个类似于 nyavro 的答案,但针对您的情况使用了过滤器。
myMap.groupBy(_._1/60).filterKeys(key =>
key >= 1446462600/60 && key <= 1446462600/60+60
).map{
case (k, v) => k*60 -> v.map(_._2).sum
}
res1: scala.collection.immutable.Map[Int,Int] = Map(1446462600 -> 6)