Data Pipeline Patterns
Group Regions
Grouping accumulates records under a shared key.
Program
Play the program to count orders by region, optionally filtering to open orders.
group_regions.dart
Replay: real traced execution (multi-file project)
void main() {
var orders = [
{'region': 'east', 'status': 'open'},
{'region': 'west', 'status': 'open'},
{'region': 'west', 'status': 'closed'},
];
var statusFilter = 'all';
var counts = <String, int>{};
for (var order in orders) {
if (statusFilter != 'all' && order['status'] != statusFilter) continue;
var region = order['region']!;
counts[region] = (counts[region] ?? 0) + 1;
}
print('counts=${counts.entries.map((e) => '${e.key}=${e.value}').join(";")}');
}
void main() {
var orders = [
{'region': 'east', 'status': 'open'},
{'region': 'west', 'status': 'open'},
{'region': 'west', 'status': 'closed'},
];
var statusFilter = 'open';
var counts = <String, int>{};
for (var order in orders) {
if (statusFilter != 'all' && order['status'] != statusFilter) continue;
var region = order['region']!;
counts[region] = (counts[region] ?? 0) + 1;
}
print('counts=${counts.entries.map((e) => '${e.key}=${e.value}').join(";")}');
}
statusFilter ← all
6];7var statusFilter = 'all';8var counts = <String, int>{};values this stepallstatusFiltercounts ← {}
7var statusFilter = 'all';8var counts = <String, int>{};9for (var order in orders) {values this step{}countsorder ← east/open
8var counts = <String, int>{};9for (var order in orders) {10 if (statusFilter != 'all' && order['status'] != statusFilter) continue;values this stepeast/openorderregion ← east
10if (statusFilter != 'all' && order['status'] != statusFilter) continue;11var region = order['region']!;12counts[region] = (counts[region] ?? 0) + 1;values this stepeastregioncounts ← {east: 1}
11 var region = order['region']!;12 counts[region] = (counts[region] ?? 0) + 1;13}values this step{east: 1}countsorder ← west/open
8var counts = <String, int>{};9for (var order in orders) {10 if (statusFilter != 'all' && order['status'] != statusFilter) continue;values this stepwest/openorderregion ← west
10if (statusFilter != 'all' && order['status'] != statusFilter) continue;11var region = order['region']!;12counts[region] = (counts[region] ?? 0) + 1;values this stepwestregioncounts ← {east: 1, west: 1}
11 var region = order['region']!;12 counts[region] = (counts[region] ?? 0) + 1;13}values this step{east: 1, west: 1}countsorder ← west/closed
8var counts = <String, int>{};9for (var order in orders) {10 if (statusFilter != 'all' && order['status'] != statusFilter) continue;values this stepwest/closedorderregion ← west
10if (statusFilter != 'all' && order['status'] != statusFilter) continue;11var region = order['region']!;12counts[region] = (counts[region] ?? 0) + 1;values this stepwestregioncounts ← {east: 1, west: 2}
11 var region = order['region']!;12 counts[region] = (counts[region] ?? 0) + 1;13}values this step{east: 1, west: 2}countsprint('counts=${counts.entries.map((e) => '${e.key}=${e.value}').join(…
13 }14 print('counts=${counts.entries.map((e) => '${e.key}=${e.value}').join(";")}');15}outputcounts=east=1;west=2values this step{east: 1, west: 2}counts
statusFilter ← open
6];7var statusFilter = 'open';8var counts = <String, int>{};values this stepopenstatusFiltercounts ← {}
7var statusFilter = 'open';8var counts = <String, int>{};9for (var order in orders) {values this step{}countsorder ← east/open
8var counts = <String, int>{};9for (var order in orders) {10 if (statusFilter != 'all' && order['status'] != statusFilter) continue;values this stepeast/openorderregion ← east
10if (statusFilter != 'all' && order['status'] != statusFilter) continue;11var region = order['region']!;12counts[region] = (counts[region] ?? 0) + 1;values this stepeastregioncounts ← {east: 1}
11 var region = order['region']!;12 counts[region] = (counts[region] ?? 0) + 1;13}values this step{east: 1}countsorder ← west/open
8var counts = <String, int>{};9for (var order in orders) {10 if (statusFilter != 'all' && order['status'] != statusFilter) continue;values this stepwest/openorderregion ← west
10if (statusFilter != 'all' && order['status'] != statusFilter) continue;11var region = order['region']!;12counts[region] = (counts[region] ?? 0) + 1;values this stepwestregioncounts ← {east: 1, west: 1}
11 var region = order['region']!;12 counts[region] = (counts[region] ?? 0) + 1;13}values this step{east: 1, west: 1}countsorder ← west/closed
8var counts = <String, int>{};9for (var order in orders) {10 if (statusFilter != 'all' && order['status'] != statusFilter) continue;values this stepwest/closedorderskip ← true
9for (var order in orders) {10 if (statusFilter != 'all' && order['status'] != statusFilter) continue;11 var region = order['region']!;values this steptrueskipopenstatusFilterclosedorder.statusprint('counts=${counts.entries.map((e) => '${e.key}=${e.value}').join(…
13 }14 print('counts=${counts.entries.map((e) => '${e.key}=${e.value}').join(";")}');15}outputcounts=east=1;west=1values this step{east: 1, west: 1}counts
map literal
`<String, int>{}` creates a typed empty map.
null fallback
`counts[region] ?? 0` supplies zero for a new group.
entries.map
Mapping entries creates display strings for each group.