我想使用Scala方法zip和max找到一个具有max int值的对象。例如,我有一个带有嵌套对象的复杂对象。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: addinfourl instance has no attribute '__exit__'
答案 0 :(得分: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")
)
然后:
scala> as.maxBy(_.b.value)
res0: A = A(,B(10,),)
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,),)
但maxBy
可能更适合一次性操作。