Как конвертировать, группировать и сортировать java.util.List [java.util.Map [String, Object]]? - PullRequest
2 голосов
/ 14 сентября 2011

Я конвертирую это:

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 Ответ

3 голосов
/ 14 сентября 2011

Это дает результат, но я не знаю, если это то, что вы хотели:

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

Я добавил карту ( .asScala), чтобы конвертировать ваши Java-карты в карты Scala.Группой по значению является объект java.lang.Object, у которого нет порядка;используя sortWith ( ._ 1.asInstanceOf [Int]> _._ 1.asInstanceOf [Int]), я приводил его к типу Int, чтобы отсортировать.Это, конечно, приведет к сбою, если используется какой-то другой объект, но нет способа заказать объект, о котором вы ничего не знаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...