scala - 无法访问 maxBy 返回的 Map

标签 scala maxby

我有一个Map[String, Any] donut

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

我想使用 maxBy 查找价格最高的 donut 。

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

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

我可以访问d("price")来查找最高价 donut 的价格。但如果我尝试在一行中执行此操作:

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 的语法糖,因为无论您作为第二个参数列表传递什么,都将像隐式参数一样传递。 不过,您可以显式调用 apply:

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

它并不像您正在寻找的那么漂亮,但它仍然是单衬。

希望有帮助:)

关于scala - 无法访问 maxBy 返回的 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45571808/

相关文章:

java - 如何将 Scala Iterable 转换为 Java util.List?

sql - 如何根据另一列的聚合获得一列的相应值?

google-bigquery - Bigquery 标准 SQL "max_by"和 "regr_slope"函数

scala - 在 Scala 中拆分出 3 个或更多数组

java - 将类参数从 Java 转换为 Scala

performance - Scala:可变对象与不可变对象(immutable对象)性能 - OutOfMemoryError

Scala 协变容器

javascript - 相当于 JavaScript 中 Lodash 的 .maxBy

ruby - 返回可以为多个的所有最大值或最小值