我有一些元组列表,如果这个元组包含时间戳,则为一个元组。我尝试按时间戳排序此列表并转换为地图,如:
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)
有谁知道我做错了什么?我希望时间戳按升序排列,但它们不是。
答案 0 :(得分:2)
地图不会保留订单,因此您的排序会再次被丢弃。如果您的地图保持排序至关重要,则可以使用SortedMap
。如果您需要非标准订购,可以在TreeMap
。
答案 1 :(得分:0)
地图不保留顺序,因此排序的排序会丢失。 SortedMap是克服这个问题的主要选择。
此外,您可以考虑使用ListMap,它按照添加顺序保留其成员。 ListMap的缺点是许多操作需要线性时间。