title: What's the most efficient way to reuse an iterator in Rust?
body: <p>I'd like to reuse an iterator I made, so as to avoid paying to recreate it from scratch. But iterators don't seem to be <code>clone</code>able and <code>collect</code> moves the iterator so I can't reuse it.</p>
  
  <p>Here's more or less the equivalent of what I'm trying to do.</p>
  
  <pre><code>let my_iter = my_string.unwrap_or("A").chars().flat_map(|c|c.to_uppercase()).map(|c| Tag::from(c).unwrap() );
  let my_struct = {
    one: my_iter.collect(),
    two: my_iter.map(|c|{(c,Vec::new())}).collect(),
    three: my_iter.filter_map(|c|if c.predicate(){Some(c)}else{None}).collect(),
    four: my_iter.map(|c|{(c,1.0/my_float)}).collect(),
    five: my_iter.map(|c|(c,arg_time.unwrap_or(time::now()))).collect(),
    //etc...
  }
  </code></pre>