我有一些收集,实现def foreach(f: MyType => Unit): Unit.
MyTypeval value: Int在正常情况下具有大于或等于零的成员.
如何找到最大限度value使用的元素foreach?
UPD:
应该有方法def max: MyType中MyType实现该逻辑.
你可以实现scala.collection.Traversable- 然后你可以使用方法maxBy(和所有其他方法Traversable):
import scala.collection.Traversable
case class MyType(value: Int)
class MyCollection {
def foreach(f: MyType => Unit): Unit = Seq(MyType(3), MyType(5), MyType(2)) foreach f
}
implicit class MyCollectionTraversable(c: MyCollection) extends Traversable[MyType] {
override def foreach[U](f: MyType => U): Unit = c.foreach{e => f(e); ()}
}
Run Code Online (Sandbox Code Playgroud)
用法:
new MyCollection().maxBy{_.value}
// MyType = MyType(5)
Run Code Online (Sandbox Code Playgroud)
你也可以Ordering[MyType]像这样添加隐含:
import scala.math.Ordering
implicit val myTypeOrd = Ordering.by{ (_: MyType).value }
new MyCollection().max
// MyType = MyType(5)
Run Code Online (Sandbox Code Playgroud)
您也可以max手动添加自定义方法,但即使在这种情况下MyCollectionTraversable也很有用:
class MyCollectionTraversable(c: MyCollection) extends Traversable[MyType] {
override def foreach[U](f: MyType => U): Unit = c.foreach{e => f(e); ()}
}
implicit class MyCollectionHelper(val c: MyCollection) extends AnyVal {
def max: MyType = new MyCollectionTraversable(c).maxBy{_.value}
}
Run Code Online (Sandbox Code Playgroud)
用法:
new MyCollection().max
// MyType = MyType(5)
Run Code Online (Sandbox Code Playgroud)