Just like fold
, there is a reduce
combinator. And there are two versions: reduceLeft
and reduceRight
. Here is an example:
scala> val l = List(1,2,3) l: List[Int] = List(1, 2, 3) scala> l reduceLeft { (acc, n) => acc + n } res4: Int = 6
In fold
, we provide the initial value for the accumulator. However, here the accumulator is set to the first value of the collection.
If there is no first value, the reduce will fail as shown here:
scala> List[Int]() reduceLeft { (acc, n) => acc + n } java.lang.UnsupportedOperationException: empty.reduceLeft
On the other hand, if invoked on an empty collection, fold
returns the initial value itself:
scala> val l = List[Int]() l: List[Int] = List() scala> l.fold(0) { (acc, n) => acc + n } res17: Int = 0
Having got our feet wet, here is an interesting example that tells us some more about reduce
. We will also see what the differences are between the left and right versions of reduce
. Let's say we need to print a list of numbers...