O'Reilly logo

Scala Functional Programming Patterns by Atul S. Khot

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Reduce

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 ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required