0

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

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)

有谁知道我做错了什么?我希望时间戳按升序排列,但事实并非如此。

4

2 回答 2

2

地图不保留顺序,因此您的排序再次被丢弃。SortedMap如果您的地图必须保持排序,您可以使用。如果你想要一个非标准的排序,你可以在 a 中指定一个TreeMap

于 2013-01-31T20:14:22.017 回答
0

地图不保留顺序,因此排序顺序丢失。SortedMap 是克服这个问题的主要替代方案。

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

于 2013-02-02T10:08:48.880 回答