Reducing is the act of taking a collection and simplifying it down to a single value. For a list of numbers, you might want to use the reduce function to quickly calculate the sum of those numbers. For a list of strings, you can use reduce to concatenate all the values.
A reduce function will provide two parameters, the previous result, and the current elements:
final total = allAges.reduce((total, age) => total + age);
The first time this function runs, the total value will be 0. The function will return 0 plus the first age value, 10. In the second iteration, the total value will 10. That function will then return 10 + 9. This process will continue until all the elements have been added to the total value.
Since higher-order functions are mostly abstractions on top of loops, we could write this code without the reduce function, like so:
int sum = 0;
for (int age in allAges) {
sum += age;
}
Just like with where(), Dart also provides alternative implementations of reduce that you may want to use. The fold() function allows you to provide an initial value for the reducer. This is helpful for non-numeric types such as strings or if you do not want your code to start reducing from 0:
final oddTotal = allAges.fold<int>(-1000, (total, age) => total + age);