如何找到对象序列中的查找最大值?

eug*_*enn 0 scala

我想找到一个使用Scala方法zip和max的序列中具有max int值的对象.例如,我有一个带有嵌套对象的复杂对象.

case class A(prop1: String, b: B, prop2:String)
case class B(val:Int, prop1: String)

Seq[A]
Run Code Online (Sandbox Code Playgroud)

Tra*_*own 5

您可以maxBy在序列上使用.例如(轻轻编辑以便它可以编译):

case class B(value: Int, prop1: String)
case class A(prop1: String, b: B, prop2: String)

val as = Seq(
  A("", B(10, ""), ""),
  A("foo", B(1, "bar"), "qux"),
  A("John", B(3, "Mary"), "Bob")
)
Run Code Online (Sandbox Code Playgroud)

然后:

scala> as.maxBy(_.b.value)
res0: A = A(,B(10,),)
Run Code Online (Sandbox Code Playgroud)

参数maxBy只是一个函数,从A编译器可以告诉如何订购的东西(更具体地说是一个Ordering实例的任何东西).编译器知道如何比较整数,所以我们可以使用_.b.value,这就像糖一样(a: A) => a.b.value.

您还可以提供Ordering实例A并使用max:

scala> implicit val orderingA: Ordering[A] = Ordering.by(_.b.value)
orderingA: Ordering[A] = scala.math.Ordering$$anon$9@3341afc6

scala> as.max
res1: A = A(,B(10,),)
Run Code Online (Sandbox Code Playgroud)

但maxBy可能更适合一次性操作.