Trait FromParallelIterator

trait FromParallelIterator<T>
where
    T: Send

FromParallelIterator implements the creation of a collection from a ParallelIterator. By implementing FromParallelIterator for a given type, you define how it will be created from an iterator.

FromParallelIterator is used through ParallelIterator's collect() method.

Examples

Implementing FromParallelIterator for your type:

use rayon::prelude::*;
use std::mem;

struct BlackHole {
    mass: usize,
}

impl<T: Send> FromParallelIterator<T> for BlackHole {
    fn from_par_iter<I>(par_iter: I) -> Self
        where I: IntoParallelIterator<Item = T>
    {
        let par_iter = par_iter.into_par_iter();
        BlackHole {
            mass: par_iter.count() * mem::size_of::<T>(),
        }
    }
}

let bh: BlackHole = (0i32..1000).into_par_iter().collect();
assert_eq!(bh.mass, 4000);

Required Methods

fn from_par_iter<I>(par_iter: I) -> Self
where
    I: IntoParallelIterator<Item = T>

Creates an instance of the collection from the parallel iterator par_iter.

If your collection is not naturally parallel, the easiest (and fastest) way to do this is often to collect par_iter into a LinkedList (via collect_vec_list) or another intermediate data structure and then sequentially extend your collection. However, a more 'native' technique is to use the par_iter.fold or par_iter.fold_with methods to create the collection. Alternatively, if your collection is 'natively' parallel, you can use par_iter.for_each to process each element in turn.

Implementors