不能访问地图由maxBy

问题描述:

回到我的甜甜圈不能访问地图由maxBy

val donuts: Seq[Map[String, Any]] = Seq(Map("type" -> "plain", "price" -> 1.5), Map("type" -> "jelly", "price" -> 2.5)) 

Map[String, Any]我想找到使用maxBy单价最高的甜甜圈。

val d = donuts.maxBy(donut => donut("price").toString.toDouble) 

成功返回Map[String,Any] = Map(type -> "jelly", price -> 2.5)

我可以访问d("price")找到单价最高的甜甜圈的价格。但是,如果我尝试做这一条线:

donuts.maxBy(donut => donut("price").toString.toDouble)("price") 

它抛出:

 
error: type mismatch; 
found : String("price") 
required: Ordering[Double] 
     (donuts.maxBy(donut => donut("price").toString.toDouble))("price") 
                   ^

这里有什么问题,我怎么能擀成一条线吗?

这是因为maxBy需要一个隐含的有序度:

def maxBy[B](f: A => B)(implicit cmp: Ordering[B]): A 

不幸的是你不能使用应用的语法糖,因为无论你传递作为第二个参数列表将被传递,就像它是隐含参数。 可以调用应用虽然明确:

donuts.maxBy(donut => donut("price").toString.toDouble).apply("price") 

这不是漂亮,你在找什么,但它仍然是一个一行。

希望能帮到:)