在Map中排序时间戳

时间:2013-01-31 20:05:36

标签: scala

我有一些元组列表,如果这个元组包含时间戳,则为一个元组。我尝试按时间戳排序此列表并转换为地图,如:

println(s"--list before order ${vendingMachineResults.map(v => v._5.timestamp)}")

val vendingMachineResultsGroupedByTimestamp =
  vendingMachineResults.sortBy(v1 => 
    (new DateTime(v1._5.timestamp)).toDate()
  ).flatMap(vendingMachineResult =>    
    Map(vendingMachineResult._5.timestamp -> vendingMachineResult)
  ).toMap

println(s"--Map with vending machines ordered by timestamp: ${vendingMachineResultsGroupedByTimestamp.keys}")

但输出错误:

--List before ordering: 
List(2012-04-16 14:33:34.807, 
2012-02-16 14:52:25.715, 
2012-06-18 14:52:25.715, 
2012-07-10 14:54:19.651, 
2012-07-16 14:54:19.651)
--Map with vending machines ordered by timestamp: 
Set(2012-04-16 14:33:34.807, 
    2012-02-16 14:52:25.715, 
    2012-06-18 14:52:25.715, 
    2012-07-16 14:54:19.651, 
    2012-07-10 14:54:19.651)

有谁知道我做错了什么?我希望时间戳按升序排列,但它们不是。

2 个答案:

答案 0 :(得分:2)

地图不会保留订单,因此您的排序会再次被丢弃。如果您的地图保持排序至关重要,则可以使用SortedMap。如果您需要非标准订购,可以在TreeMap

中指定一个

答案 1 :(得分:0)

地图不保留顺序,因此排序的排序会丢失。 SortedMap是克服这个问题的主要选择。

此外,您可以考虑使用ListMap,它按照添加顺序保留其成员。 ListMap的缺点是许多操作需要线性时间。