在排序序列(或地图)时,我可以调用sortWith中的方法吗?

时间:2016-08-31 03:05:52

标签: scala

我有一个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. 
}

1 个答案:

答案 0 :(得分:1)

你使用了错误的语法。使用sortWith你必须做类似的事情:

fieldMap.mapValues(
   fieldList => fieldList.sortWith(
     (a,b) => fieldValues(a) > fieldValues(b)
   )
)