【问题标题】:How to convert, group and sort java.util.List[java.util.Map[String, Object]]?如何对 java.util.List[java.util.Map[String, Object]] 进行转换、分组和排序?
【发布时间】:2011-11-16 16:41:06
【问题描述】:

我转换这个:

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)

【问题讨论】:

    标签: scala sorting collections


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢!这是我的问题的解决方案。
    猜你喜欢
    • 2017-09-28
    • 2011-03-08
    • 2020-09-25
    • 1970-01-01
    • 2012-04-30
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多