如何转换,分组和排序java.util.List [java.util.Map [String,Object]]?

时间:2011-09-14 04:24:26

标签: scala sorting collections

我转换了这个:

import scala.collection.JavaConverters._
import scala.collection.JavaConverters._
val list:java.util.List[java.util.Map[String, Object]] = new java.util.ArrayList[java.util.Map[String, Object]]()
val map1:java.util.Map[String, AnyRef] = new java.util.HashMap[String,AnyRef]()
map1.put("payout", 3.asInstanceOf[AnyRef])
list.add(map1)
val map2:java.util.Map[String, AnyRef] = new java.util.HashMap[String, AnyRef]()
map2.put("payout", 2.asInstanceOf[AnyRef])
list.add(map2)
val map3:java.util.Map[String, AnyRef] = new java.util.HashMap[String, AnyRef]()
map3.put("payout", 2.asInstanceOf[AnyRef])
list.add(map3)
val map4:java.util.Map[String, AnyRef] = new java.util.HashMap[String, AnyRef]()
map4.put("payout", 1.asInstanceOf[AnyRef])
list.add(map4)
println(list)
val result = list.asScala
//result Buffer({payout=3}, {payout=2}, {payout=2}, {payout=1})

我希望: list.asScala.groupBy(_(“payout”))。toList保存其排序(按付款排序) 但.toList.sortBy(_._1)抛出错误: 错误:没有为java.lang.Object定义隐式排序。

val result = list.groupBy(_("payout")).toList.sortBy(_._1)

1 个答案:

答案 0 :(得分:3)

这给出了结果,但我不知道它是否是你想要的:

val result = list.asScala.map(_.asScala).groupBy(_("payout")).toList.sortWith(_._1.asInstanceOf[Int] > _._1.asInstanceOf[Int])

我添加了地图( .asScala),以便将您的java地图转换为scala地图。 group by value是一个没有排序的java.lang.Object;使用sortWith( ._ 1.asInstanceOf [Int]> _._ 1.asInstanceOf [Int])我将它转换为Int以对其进行排序。如果使用其他对象,这当然会崩溃,但是没有办法订购一个你不了解的对象。