Scala 如何在一系列对象中找到最大值?
我希望使用Scala方法zip和max从序列中查找具有max int值的对象。例如,我有一个具有嵌套对象的复杂对象Scala 如何在一系列对象中找到最大值?,scala,Scala,我希望使用Scala方法zip和max从序列中查找具有max int值的对象。例如,我有一个具有嵌套对象的复杂对象 case class A(prop1: String, b: B, prop2:String) case class B(val:Int, prop1: String) Seq[A] 您可以在序列上使用maxBy。例如(轻轻编辑以便编译): 然后: scala> as.maxBy(_.b.value) res0: A = A(,B(10,),) maxBy的参数只是一个
case class A(prop1: String, b: B, prop2:String)
case class B(val:Int, prop1: String)
Seq[A]
您可以在序列上使用
maxBy
。例如(轻轻编辑以便编译):
然后:
scala> as.maxBy(_.b.value)
res0: A = A(,B(10,),)
maxBy
的参数只是一个从a
到编译器可以告诉如何排序的函数(更具体地说是任何具有排序
实例的函数)。编译器知道如何比较整数,所以我们可以只使用\uu.b.value
,这是类似(a:a)=>a.b.value
的糖
您还可以为A
提供一个Ordering
实例,只需使用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,),)
但是
maxBy
可能更适合一次性操作。您可以在序列上使用maxBy
。例如(轻轻编辑以便编译):
然后:
scala> as.maxBy(_.b.value)
res0: A = A(,B(10,),)
maxBy
的参数只是一个从a
到编译器可以告诉如何排序的函数(更具体地说是任何具有排序
实例的函数)。编译器知道如何比较整数,所以我们可以只使用\uu.b.value
,这是类似(a:a)=>a.b.value
的糖
您还可以为A
提供一个Ordering
实例,只需使用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,),)
但是maxBy
可能更适合一次性操作