Вы можете использовать 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] = [email protected]
scala> as.max
res1: A = A(,B(10,),)
Но maxBy
, вероятно, больше подходит для разового работы.