Rust

flat_map and Iterator::flatten

admin by @admin ADMIN
1d ago
May 31, 2026
Public
0 0 up · 0 down Sign in to vote
`flat_map(f)` is `map(f).flatten()` — map each item to an iterator, then concatenate. Indispensable for working with nested structures.
Rust
Raw
fn main() {
    let words = vec!["hello world", "foo bar baz", "rust"];

    // Split each phrase into words, then flatten
    let all_words: Vec<&str> = words.iter()
        .flat_map(|s| s.split_whitespace())
        .collect();
    println!("{all_words:?}");        // ["hello", "world", "foo", "bar", "baz", "rust"]

    // flatten — when you already have Iterator<Item = Iterator<Item = T>>
    let lists = vec![vec![1, 2, 3], vec![4, 5], vec![6]];
    let merged: Vec<i32> = lists.into_iter().flatten().collect();
    println!("{merged:?}");           // [1, 2, 3, 4, 5, 6]

    // Filter + flat_map — extract chars from Some strings only
    let opts = vec![Some("abc"), None, Some("de")];
    let chars: Vec<char> = opts.iter().flatten().flat_map(|s| s.chars()).collect();
    println!("{chars:?}");            // ['a', 'b', 'c', 'd', 'e']
}
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.