2015-11-02 59 views
0

所以我有一个简单的地图类型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(..) 

我的地图是这样,现在我想显示由11:10和11:11之间分钟分组的累积计数结果,所以我的输出将是如下

1446462630->2 
1446462640->1 
1446462650->3 

1446462600 -> 6 

1446462600(11/02/2015 11:10分钟会话) 我该如何存档? P.S我试过myMap.groupBy{ _._1/(60))它不起作用?任何关于如何在scala中实现的建议?

在此先感谢。

回答

4

你几乎有:

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

而且考虑转换TIMEUNIT使用。为你的情况:

TimeUnit.SECONDS.toMinutes(_._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) 
+0

非常感谢你,它现在工作得很好。分组后,我错过了数值的总和。 –