我想找到一个使用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)
您可以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可能更适合一次性操作.
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |