Collections
List Methods
Dart List exposes a small set of methods that chain cleanly: where(test) filters by a predicate and returns a lazy Iterable, map(fn) transforms each element and also returns a lazy Iterable, and toList() collects an Iterable back into a fresh List. join(sep) then turns the elements into a single String with sep between them. The original list is never mutated.
Program
Play the program to filter for even numbers, double each, and join the result with +.
list_methods.dart
Replay: real traced execution (multi-file project)
void main() {
var nums = [1, 2, 3, 4, 5];
var evens = nums.where((n) => n.isEven).toList();
var doubled = evens.map((n) => n * 2).toList();
var summary = doubled.join('+');
print('evens=$evens doubled=$doubled total=$summary');
}
nums ← [1, 2, 3, 4, 5]
1void main() {2 var nums = [1, 2, 3, 4, 5];3 var evens = nums.where((n) => n.isEven).toList();values this step[1, 2, 3, 4, 5]numsevens ← [2, 4]
2var nums = [1, 2, 3, 4, 5];3var evens = nums.where((n) => n.isEven).toList();4var doubled = evens.map((n) => n * 2).toList();values this step[2, 4]evens[1, 2, 3, 4, 5]numsdoubled ← [4, 8]
3var evens = nums.where((n) => n.isEven).toList();4var doubled = evens.map((n) => n * 2).toList();5var summary = doubled.join('+');values this step[4, 8]doubled[2, 4]evenssummary ← 4+8
4var doubled = evens.map((n) => n * 2).toList();5var summary = doubled.join('+');6print('evens=$evens doubled=$doubled total=$summary');values this step4+8summary[4, 8]doubledprint('evens=$evens doubled=$doubled total=$summary');
5 var summary = doubled.join('+');6 print('evens=$evens doubled=$doubled total=$summary');7}outputevens=[2, 4] doubled=[4, 8] total=4+8values this step[2, 4]evens[4, 8]doubled4+8summary
Filter, Double, Join
- Start with
nums:[1, 2, 3, 4, 5]. wherekeeps only even numbers.mapdoubles each kept number.join('+')turns the doubled list into text. | Stage | Values | | --- | --- | | start |[1, 2, 3, 4, 5]| | afterwhere|[2, 4]| | aftermap|[4, 8]| | afterjoin|4+8|
where
`list.where(test)` returns a lazy `Iterable` of every element where `test(e)` is `true`. `toList()` materializes it into a fresh `List`.
map
`iterable.map(fn)` returns a lazy `Iterable` of `fn(e)` for each element. The element type can change; here `int` stays `int`.
join
`list.join(sep)` returns a single `String` with `sep` between successive elements. The list itself is not modified.
Exercise: list_methods.dart
Filter a list to even numbers, double them with map, and join the result with plus signs