Fold/Reduce

Much like forEach(), both fold() and reduce() are terminating functions. But instead of terminating with Unit, which is not useful, they terminate with a single value of the same type. 

The most common example of reduce is, of course, for adding up stuff. With the list of people from the previous example, we can do the following:

println(people.reduce {p1, p2 ->
Person("Combined", "Age", p1.age + p2.age)
})

The output of the preceding code will be as follows:

Person(firstName=Combined, lastName=Age, age=64)

Well, combining a lot of people into one doesn't make much sense, unless you're a fan of some horror movies.

But with reduce, we can also compute who's the oldest or the youngest in the list:

println(people.reduce {p1, p2 ->
if (p1.age > p2.age) { p1 } else { p2 }
})

The second function we're about to discuss, fold(), is much like reduce, but it takes another argument, which is the initial value. It's useful when you've already computed something, and now want to use this intermediate result:

println(people.drop(1) // Skipping first one
.fold(people.first()) // Using first one as initial value
{p1, p2 ->
Person("Combined", "Age", p1.age + p2.age)
})
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.118.10.32