Parallel map in Rust
The crate rayon implements similar functionality:
use rayon::prelude::*;

let mut par_iter = (0..5).into_par_iter().map(|x| x * x);

let squares: Vec&lt;_&gt; = par_iter.collect();

In your solution, the multithreading part looks OK.
The part where you collect results could be done more efficiently. Specifically, one alloc and data copy could be avoided with use of a little unsafety.
let mut output_vec: Vec&lt;U&gt; = Vec::with_capacity(initial_len);
unsafe {
    output_vec.set_len(initial_len);
}
while let Ok((res, index)) = out_r.recv() {
    let old = mem::replace(&amp;mut output_vec[index], res);
    mem::forget(old);
}

Same optimization could be done a little more succintly with ptr::write. Further, you may need to assert that output_vec has correct length, and forget the vec beforehand in case the assertion fails. My concern is that above proposed code is not protected against incorrect drops if U has a destructor and code panics.
Your bound of U as Default appears to be unnecessary.