Iterator Pipeline for Data Transformation

Chain iterator adapters to filter, map, and fold a collection lazily, expressing a transformation pipeline without intermediate vectors.

RustData Integrity

Code

snippet
#[derive(Debug)]
struct Sale {
    region: String,
    amount: i64,
}

fn total_by_region(sales: &[Sale], region: &str) -> i64 {
    sales
        .iter()
        .filter(|sale| sale.region == region)
        .map(|sale| sale.amount)
        .filter(|amount| *amount > 0)
        .sum()
}

fn main() {
    let sales = vec![
        Sale { region: "eu".into(), amount: 120 },
        Sale { region: "us".into(), amount: 80 },
        Sale { region: "eu".into(), amount: -10 },
    ];
    let top: Vec<&Sale> = sales
        .iter()
        .filter(|sale| sale.amount > 0)
        .collect();
    println!("eu total = {}", total_by_region(&sales, "eu"));
    println!("positive sales = {}", top.len());
}