Trait sp_std::iter::FromIterator

1.0.0 · source ·
pub trait FromIterator<A>: Sized {
    // Required method
    fn from_iter<T>(iter: T) -> Self
       where T: IntoIterator<Item = A>;
}
Expand description

Conversion from an Iterator.

By implementing FromIterator for a type, you define how it will be created from an iterator. This is common for types which describe a collection of some kind.

If you want to create a collection from the contents of an iterator, the Iterator::collect() method is preferred. However, when you need to specify the container type, FromIterator::from_iter() can be more readable than using a turbofish (e.g. ::<Vec<_>>()). See the Iterator::collect() documentation for more examples of its use.

See also: IntoIterator.

Examples

Basic usage:

let five_fives = std::iter::repeat(5).take(5);

let v = Vec::from_iter(five_fives);

assert_eq!(v, vec![5, 5, 5, 5, 5]);

Using Iterator::collect() to implicitly use FromIterator:

let five_fives = std::iter::repeat(5).take(5);

let v: Vec<i32> = five_fives.collect();

assert_eq!(v, vec![5, 5, 5, 5, 5]);

Using FromIterator::from_iter() as a more readable alternative to Iterator::collect():

use std::collections::VecDeque;
let first = (0..10).collect::<VecDeque<i32>>();
let second = VecDeque::from_iter(0..10);

assert_eq!(first, second);

Implementing FromIterator for your type:

// A sample collection, that's just a wrapper over Vec<T>
#[derive(Debug)]
struct MyCollection(Vec<i32>);

// Let's give it some methods so we can create one and add things
// to it.
impl MyCollection {
    fn new() -> MyCollection {
        MyCollection(Vec::new())
    }

    fn add(&mut self, elem: i32) {
        self.0.push(elem);
    }
}

// and we'll implement FromIterator
impl FromIterator<i32> for MyCollection {
    fn from_iter<I: IntoIterator<Item=i32>>(iter: I) -> Self {
        let mut c = MyCollection::new();

        for i in iter {
            c.add(i);
        }

        c
    }
}

// Now we can make a new iterator...
let iter = (0..5).into_iter();

// ... and make a MyCollection out of it
let c = MyCollection::from_iter(iter);

assert_eq!(c.0, vec![0, 1, 2, 3, 4]);

// collect works too!

let iter = (0..5).into_iter();
let c: MyCollection = iter.collect();

assert_eq!(c.0, vec![0, 1, 2, 3, 4]);

Required Methods§

source

fn from_iter<T>(iter: T) -> Selfwhere T: IntoIterator<Item = A>,

Creates a value from an iterator.

See the module-level documentation for more.

Examples

Basic usage:

let five_fives = std::iter::repeat(5).take(5);

let v = Vec::from_iter(five_fives);

assert_eq!(v, vec![5, 5, 5, 5, 5]);

Implementors§

source§

impl FromIterator<char> for String

1.23.0 · source§

impl FromIterator<()> for ()

Collapses all unit items from an iterator into one.

This is more useful when combined with higher-level abstractions, like collecting to a Result<(), E> where you only care about errors:

use std::io::*;
let data = vec![1, 2, 3, 4, 5];
let res: Result<()> = data.iter()
    .map(|x| writeln!(stdout(), "{x}"))
    .collect();
assert!(res.is_ok());
1.45.0 · source§

impl FromIterator<Box<str, Global>> for String

1.4.0 · source§

impl FromIterator<String> for String

1.52.0 · source§

impl FromIterator<OsString> for OsString

1.17.0 · source§

impl<'a> FromIterator<&'a char> for String

source§

impl<'a> FromIterator<&'a str> for String

1.52.0 · source§

impl<'a> FromIterator<&'a OsStr> for OsString

1.19.0 · source§

impl<'a> FromIterator<Cow<'a, str>> for String

1.52.0 · source§

impl<'a> FromIterator<Cow<'a, OsStr>> for OsString

1.12.0 · source§

impl<'a> FromIterator<char> for Cow<'a, str>

1.12.0 · source§

impl<'a> FromIterator<String> for Cow<'a, str>

1.12.0 · source§

impl<'a, 'b> FromIterator<&'b str> for Cow<'a, str>

source§

impl<'a, T> FromIterator<T> for Cow<'a, [T]>where T: Clone,

source§

impl<A, E, V> FromIterator<Result<A, E>> for Result<V, E>where V: FromIterator<A>,

source§

impl<A, V> FromIterator<Option<A>> for Option<V>where V: FromIterator<A>,

1.32.0 · source§

impl<I> FromIterator<I> for Box<[I], Global>

source§

impl<K, V> FromIterator<(K, V)> for BTreeMap<K, V, Global>where K: Ord,

source§

impl<K, V, S> FromIterator<(K, V)> for HashMap<K, V, S>where K: Eq + Hash, S: BuildHasher + Default,

source§

impl<P> FromIterator<P> for PathBufwhere P: AsRef<Path>,

source§

impl<T> FromIterator<T> for BTreeSet<T, Global>where T: Ord,

source§

impl<T> FromIterator<T> for VecDeque<T, Global>

1.37.0 · source§

impl<T> FromIterator<T> for Rc<[T]>

1.37.0 · source§

impl<T> FromIterator<T> for Arc<[T]>

source§

impl<T> FromIterator<T> for Vec<T, Global>

source§

impl<T> FromIterator<T> for BinaryHeap<T, Global>where T: Ord,

source§

impl<T> FromIterator<T> for LinkedList<T, Global>

source§

impl<T, S> FromIterator<T> for HashSet<T, S>where T: Eq + Hash, S: BuildHasher + Default,

impl<K, V, S> FromIterator<(K, V)> for AHashMap<K, V, S>where K: Eq + Hash, S: BuildHasher + Default,

impl<T, S> FromIterator<T> for AHashSet<T, S>where T: Eq + Hash, S: BuildHasher + Default,

impl<T, const CAP: usize> FromIterator<T> for ArrayVec<T, CAP>

impl<T, O> FromIterator<bool> for BitVec<T, O>where T: BitStore, O: BitOrder,

impl<'a, T, O> FromIterator<&'a bool> for BitVec<T, O>where T: BitStore, O: BitOrder,

impl<'a, T, O> FromIterator<&'a T> for BitVec<T, O>where T: BitStore, O: BitOrder,

impl<'a, M, T1, T2, O1, O2> FromIterator<BitRef<'a, M, T2, O2>> for BitVec<T1, O1>where M: Mutability, T1: BitStore, T2: BitStore, O1: BitOrder, O2: BitOrder,

impl<T, O> FromIterator<T> for BitVec<T, O>where T: BitStore, O: BitOrder,

impl<T, O, I> FromIterator<I> for BitBox<T, O>where T: BitStore, O: BitOrder, BitVec<T, O>: FromIterator<I>,

impl<'a> FromIterator<&'a [u8]> for BString

impl<'a> FromIterator<&'a str> for BString

impl<'a> FromIterator<&'a BStr> for BString

impl<'a> FromIterator<&'a u8> for BytesMut

impl<K, V> FromIterator<V> for PrimaryMap<K, V>where K: EntityRef,

impl<T> FromIterator<Steal<T>> for Steal<T>

impl<T, B> FromIterator<B> for BitFlags<T>where T: BitFlag, B: Into<BitFlags<T>>,

impl<Fut: Future> FromIterator<Fut> for FuturesOrdered<Fut>

impl<Fut: TryFuture + Unpin> FromIterator<Fut> for SelectOk<Fut>

impl<St: Stream + Unpin> FromIterator<St> for SelectAll<St>

impl<F> FromIterator<F> for TryJoinAll<F>where F: TryFuture,

impl<Fut> FromIterator<Fut> for FuturesUnordered<Fut>

impl<F: Future> FromIterator<F> for JoinAll<F>

impl<Fut: Future + Unpin> FromIterator<Fut> for SelectAll<Fut>

impl<T, N> FromIterator<T> for GenericArray<T, N>where N: ArrayLength<T>,

impl<T, S, A> FromIterator<T> for HashSet<T, S, A>where T: Eq + Hash, S: BuildHasher + Default, A: Default + Allocator + Clone,

impl<K, V, S, A> FromIterator<(K, V)> for HashMap<K, V, S, A>where K: Eq + Hash, S: BuildHasher + Default, A: Default + Allocator + Clone,

impl<T> FromIterator<(HeaderName, T)> for HeaderMap<T>

impl<K, V, S> FromIterator<(K, V)> for IndexMap<K, V, S>where K: Hash + Eq, S: BuildHasher + Default,

impl<T, S> FromIterator<T> for IndexSet<T, S>where T: Hash + Eq, S: BuildHasher + Default,

impl<A> FromIterator<A> for Arraywhere A: AsRef<JsValue>,

impl<K: Hash + Eq, V, S: BuildHasher + Default> FromIterator<(K, V)> for LinkedHashMap<K, V, S>

impl<T, S> FromIterator<T> for LinkedHashSet<T, S>where T: Eq + Hash, S: BuildHasher + Default,

impl<'a> FromIterator<Protocol<'a>> for Multiaddr

impl<T> FromIterator<(u32, T)> for IndexMap<T>

impl<N, E, Ty, Item> FromIterator<Item> for GraphMap<N, E, Ty>where Item: IntoWeightedEdge<E, NodeId = N>, N: NodeTrait, Ty: EdgeType,

impl<K, V> FromIterator<V> for IndexedVec<K, V>

impl<T: Into<Value>> FromIterator<T> for Value

impl<T> FromIterator<(usize, T)> for Slab<T>

impl<K, V, S> FromIterator<(K, V)> for SparseSecondaryMap<K, V, S>where K: Key, S: BuildHasher + Default,

impl<K: Key, V> FromIterator<(K, V)> for SecondaryMap<K, V>

impl<A: Array> FromIterator<<A as Array>::Item> for SmallVec<A>

impl<T, P> FromIterator<Pair<T, P>> for Punctuated<T, P>

impl<T, P> FromIterator<T> for Punctuated<T, P>where P: Default,

impl<A: Array> FromIterator<<A as Array>::Item> for TinyVec<A>

impl<A: Array> FromIterator<<A as Array>::Item> for ArrayVec<A>

impl<K, V> FromIterator<(K, V)> for StreamMap<K, V>where K: Hash + Eq,

impl<K: Into<Key>, V: Into<Value>> FromIterator<(K, V)> for Table

impl<V: Into<Value>> FromIterator<V> for Value

impl<V: Into<Value>> FromIterator<V> for Array

impl<K: Into<Key>, V: Into<Value>> FromIterator<(K, V)> for Value

impl<T, L> FromIterator<(T, L)> for Targetswhere T: Into<String>, L: Into<LevelFilter>,