无法访问 maxBy 返回的地图
Cannot access Map returned by maxBy
我有一个Map[String, Any]
甜甜圈
val donuts: Seq[Map[String, Any]] = Seq(Map("type" -> "plain", "price" -> 1.5), Map("type" -> "jelly", "price" -> 2.5))
我想使用 maxBy
找到价格最高的甜甜圈。
val d = donuts.maxBy(donut => donut("price").toString.toDouble)
成功returnsMap[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
不幸的是,您不能使用 apply 的语法糖,因为无论您作为第二个参数列表传递什么,都将作为隐式参数传递。
您可以显式调用应用:
donuts.maxBy(donut => donut("price").toString.toDouble).apply("price")
它没有您要找的那么漂亮,但它仍然是一条线。
希望对您有所帮助:)
我有一个Map[String, Any]
甜甜圈
val donuts: Seq[Map[String, Any]] = Seq(Map("type" -> "plain", "price" -> 1.5), Map("type" -> "jelly", "price" -> 2.5))
我想使用 maxBy
找到价格最高的甜甜圈。
val d = donuts.maxBy(donut => donut("price").toString.toDouble)
成功returnsMap[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
不幸的是,您不能使用 apply 的语法糖,因为无论您作为第二个参数列表传递什么,都将作为隐式参数传递。 您可以显式调用应用:
donuts.maxBy(donut => donut("price").toString.toDouble).apply("price")
它没有您要找的那么漂亮,但它仍然是一条线。
希望对您有所帮助:)