collect
The collect method lets you build a collection from an Iterator.
fn main() { let primes = vec![2, 3, 5, 7]; let prime_squares = primes.into_iter().map(|p| p * p).collect::<Vec<_>>(); println!("prime_squares: {prime_squares:?}"); }
This slide should take about 5 minutes. 
                    - Any iterator can be collected in to a Vec,VecDeque, orHashSet. Iterators that produce key-value pairs (i.e. a two-element tuple) can also be collected intoHashMapandBTreeMap.
Show the students the definition for collect in the standard library docs.
There are two ways to specify the generic type B for this method:
- With the “turbofish”: some_iterator.collect::<COLLECTION_TYPE>(), as shown. The_shorthand used here lets Rust infer the type of theVecelements.
- With type inference: let prime_squares: Vec<_> = some_iterator.collect(). Rewrite the example to use this form.
More to Explore
- If students are curious about how this works, you can bring up the
FromIteratortrait, which defines how each type of collection gets built from an iterator.
- In addition to the basic implementations of FromIteratorforVec,HashMap, etc., there are also more specialized implementations which let you do cool things like convert anIterator<Item = Result<V, E>>into aResult<Vec<V>, E>.
- The reason type annotations are often needed with collectis because it’s generic over its return type. This makes it harder for the compiler to infer the correct type in a lot of cases.