Java 如何在scala中对地图应用排序功能?
我在Play框架中使用MVC架构,其中视图部分是scala和html的混合体。现在,我需要在视图中对来自控制器层的贴图进行排序。因为scala没有内存,所以很难创建一个排序函数来按时间戳对地图进行排序。 谁能帮我解决这个问题,因为我是scala新手Java 如何在scala中对地图应用排序功能?,java,html,scala,playframework,Java,Html,Scala,Playframework,我在Play框架中使用MVC架构,其中视图部分是scala和html的混合体。现在,我需要在视图中对来自控制器层的贴图进行排序。因为scala没有内存,所以很难创建一个排序函数来按时间戳对地图进行排序。 谁能帮我解决这个问题,因为我是scala新手 这是我的第一个问题。任何帮助都将不胜感激。假设时间戳是映射的键(即,它是一个映射[Long,B]): 也就是说,您首先将映射转换为Seq,以便保留元素顺序(映射通常是HashMaps,具有不可预测的顺序),然后按键值元组的第一个元素对序列进行排序 如
这是我的第一个问题。任何帮助都将不胜感激。假设时间戳是映射的键(即,它是一个
映射[Long,B]
):
也就是说,您首先将映射转换为Seq
,以便保留元素顺序(映射通常是HashMap
s,具有不可预测的顺序),然后按键值元组的第一个元素对序列进行排序
如果时间戳是值,则将.\u1
替换为.\u2
请注意,如果您将中间Seq
转换回Map
(例如,使用.toMap
),您将再次回到HashMap
区域,并且您的排序将消失
所以,这可能更像你想要的:
scala.collection.immutable.SortedMap(myMap.toSeq: _*) // yields a SortedMap[Long, B]
在这里,我们将
myMap
转换为Seq
,这样就可以将它传递给SortedMap
的varargs工厂方法,我们需要了解更多来回答这个问题,但可能类似于map.toList.sortBy(u.timestamp)
是您想要的。“scala没有内存”等等,什么?Scala集合中也有ListMap,可以是可变的,也可以是不可变的,这将保持键的顺序。当然,但是ListMap是用来保持插入顺序的,但是我们需要排序。就我个人而言,我不使用ListMap
,它的性能特点使它不适合我所关心的大多数用途。
scala.collection.immutable.SortedMap(myMap.toSeq: _*) // yields a SortedMap[Long, B]