Iterator Pipeline for Data Transformation
Chain iterator adapters to filter, map, and fold a collection lazily, expressing a transformation pipeline without intermediate vectors.
Code
#[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());
}Report a problem with this exampleOpens a pre-filled issue on GitHub.