我有一个Map Map [String,Option [Seq [String]]],我有不同地图中每个字符串的值:Map [String,Option [Int]]。我试图映射值并在序列上使用sortWith但是在线阅读时,我没有看到在sortWith中有自定义方法的任何示例。
如何使用sortWith对序列进行排序?如果我想实现一个返回布尔值的自定义方法来告诉我哪个对象被认为更大,这可能吗?
val fieldMap = Map("user1" -> Seq("field1_name", "field2_name"), "user2" -> Seq("field3_name"))
val fieldValues = Map("field1_name" -> 2, "field2_name" -> 1, "field3_name" -> 3)
val sortedMap = fieldMap.mapValues(fieldList => fieldList.sortWith(fieldValues(_) < fieldValues(_)) // Scala doesn't like this
我试过了:
fieldList.sortWith{(x,y) =>
val x = fieldValues(x)
val y = fieldValues(y)
x < y
}
这给了我预期类型的类型不匹配:
(String,String) => Boolean
和实际:
(String,String) => Any
编辑解决方案:
fieldList.sortWith{(x,y) =>
val x = fieldValues(x)
val y = fieldValues(x)
x.getOrElse[Double](0.0) < y.getOrElse[Double](0.0) // have to unwrap the Option.
}
答案 0 :(得分:1)
你使用了错误的语法。使用sortWith你必须做类似的事情:
fieldMap.mapValues(
fieldList => fieldList.sortWith(
(a,b) => fieldValues(a) > fieldValues(b)
)
)