Scala - groupBy地图的键

时间:2015-11-02 08:41:41

标签: scala oop group-by maps

所以我有一个类型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(11/02/2015 11:10的分钟转换) 我怎么能做到这一点? P.S我试过myMap.groupBy{ _._1 / (60))它不起作用?有关如何在scala中实现此功能的任何建议?

提前致谢。

2 个答案:

答案 0 :(得分:4)

你几乎在那里:

myMap.groupBy{ _._1 / (60)).map {case (sec, map) => sec -> map.values.sum}

还要考虑转换时使用TimeUnit。对于你的情况:

TimeUnit.SECONDS.toMinutes(_._1)

答案 1 :(得分:0)

这是一个类似于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)