There are several ways to accomplish this. Next code snippet shows how to compute min and max using reduceLeft
.
val ls = List(1,2,3,4,5) ls.reduceLeft(_ min _) // is equivalent to ls.min ls.reduceLeft(_ max _) // is equivalent to ls.max
Same can be accomplished via foldLeft
or foldRight
.
ls.foldLeft(Int.MaxValue) (_ min _) ls.foldLeft(Int.MinValue) (_ max _)
However, can we compute both min and max in one line? Check out the following snippet.
ls.map( x=>(x,x)).reduceLeft( (x,y) => (x._1 min y._1, x._2 max y._2)
An alternative is to use foldLeft
:
ls.foldLeft ((Int.MaxValue, Int.MinValue)) ((acc:(Int,Int),y:Int) => (acc._1 min y, acc._2 max y))