2011-09-14 46 views
2

我轉換這一點:如何轉換,分組和排序java.util.List [java.util.Map [String,Object]]?

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(_( 「支付」))toList保存它的排序(按支出排序) 但.toList.sortBy(_._1)拋出錯誤: 錯誤:沒有爲java.lang.Object定義的隱式排序。

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

回答

3

這給出了一個結果,但我不知道如果你想要的東西:

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

我爲了你的java的地圖轉換爲斯卡拉地圖添加地圖(.asScala)。按值分組是一個沒有排序的java.lang.Object;使用sortWith( ._1.asInstanceOf [Int]> _._ 1.asInstanceOf [Int])我將其轉換爲Int以對其進行排序。如果使用其他對象,這當然會崩潰,但是沒有辦法訂購一個你不瞭解的對象。

+0

謝謝!這是我的問題的解決方案。 – DimParf

相關問題