Trait artifact_app::dev_prefix::FromIterator1.0.0 [] [src]

pub trait FromIterator<A> {
    fn from_iter<T>(iter: T) -> Self
    where
        T: IntoIterator<Item = A>
; }

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.

FromIterator's from_iter is rarely called explicitly, and is instead used through Iterator's collect method. See collect's documentation for more examples.

See also: IntoIterator.

Examples

Basic usage:

use std::iter::FromIterator;

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 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]);

Implementing FromIterator for your type:

use std::iter::FromIterator;

// 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

Creates a value from an iterator.

See the module-level documentation for more.

Examples

Basic usage:

use std::iter::FromIterator;

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]);

Implementations on Foreign Types

impl<A, V> FromIterator<Option<A>> for Option<V> where
    V: FromIterator<A>, 
[src]

[src]

Takes each element in the Iterator: if it is None, no further elements are taken, and the None is returned. Should no None occur, a container with the values of each Option is returned.

Here is an example which increments every integer in a vector, checking for overflow:

use std::u16;

let v = vec![1, 2];
let res: Option<Vec<u16>> = v.iter().map(|&x: &u16|
    if x == u16::MAX { None }
    else { Some(x + 1) }
).collect();
assert!(res == Some(vec![2, 3]));

impl<T> FromIterator<T> for BinaryHeap<T> where
    T: Ord
[src]

[src]

impl<T> FromIterator<T> for BTreeSet<T> where
    T: Ord
[src]

[src]

impl<K, V> FromIterator<(K, V)> for BTreeMap<K, V> where
    K: Ord
[src]

[src]

impl FromIterator<String> for String
[src]

[src]

impl<'a> FromIterator<String> for Cow<'a, str>
[src]

[src]

impl<T> FromIterator<T> for LinkedList<T>
[src]

[src]

impl<T> FromIterator<T> for Vec<T>
[src]

[src]

impl<'a> FromIterator<&'a str> for String
[src]

[src]

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

[src]

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

[src]

impl FromIterator<char> for String
[src]

[src]

impl<'a> FromIterator<char> for Cow<'a, str>
[src]

[src]

impl<'a> FromIterator<Cow<'a, str>> for String
[src]

[src]

impl<'a> FromIterator<&'a char> for String
[src]

[src]

impl<'a> FromIterator<HeaderView<'a>> for Headers
[src]

[src]

impl<S> FromIterator<S> for AcAutomaton<S, Dense> where
    S: AsRef<[u8]>, 

Create an automaton from an iterator of strings.

impl FromIterator<SslMode> for SslMode
[src]

[src]

impl FromIterator<SslVerifyMode> for SslVerifyMode
[src]

[src]

impl FromIterator<Flag> for Flag
[src]

[src]

impl FromIterator<SslOption> for SslOption
[src]

[src]

impl<'a> FromIterator<HeaderView<'a>> for Headers
[src]

[src]

impl<T> FromIterator<T> for Value where
    T: Into<Value>, 
[src]

[src]

Convert an iteratable type to a Value

Examples

use serde_json::Value;

let v = std::iter::repeat(42).take(5);
let x: Value = v.collect();
use serde_json::Value;

let v: Vec<_> = vec!["lorem", "ipsum", "dolor"];
let x: Value = v.into_iter().collect();
use std::iter::FromIterator;
use serde_json::Value;

let x: Value = Value::from_iter(vec!["lorem", "ipsum", "dolor"]);

impl FromIterator<(String, Value)> for Map<String, Value>
[src]

[src]

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

impl FromIterator<OFlag> for OFlag

impl FromIterator<MsFlags> for MsFlags

impl FromIterator<MQ_OFlag> for MQ_OFlag

impl FromIterator<Mode> for Mode

impl FromIterator<QuotaValidFlags> for QuotaValidFlags

impl FromIterator<InputFlags> for InputFlags

impl FromIterator<CloneFlags> for CloneFlags

impl FromIterator<MsFlags> for MsFlags

impl FromIterator<SockFlag> for SockFlag

impl FromIterator<EventFlags> for EventFlags

impl FromIterator<SealFlag> for SealFlag

impl FromIterator<MsgFlags> for MsgFlags

impl FromIterator<SaFlags> for SaFlags

impl FromIterator<EpollCreateFlags> for EpollCreateFlags

impl FromIterator<FdFlag> for FdFlag

impl FromIterator<LocalFlags> for LocalFlags

impl FromIterator<ControlFlags> for ControlFlags

impl FromIterator<EpollFlags> for EpollFlags

impl FromIterator<OutputFlags> for OutputFlags

impl FromIterator<MntFlags> for MntFlags

impl FromIterator<FsFlags> for FsFlags

impl FromIterator<FdFlag> for FdFlag

impl FromIterator<SFlag> for SFlag

impl FromIterator<WaitPidFlag> for WaitPidFlag

impl FromIterator<SpliceFFlags> for SpliceFFlags

impl FromIterator<MapFlags> for MapFlags

impl FromIterator<ProtFlags> for ProtFlags

impl FromIterator<MemFdCreateFlag> for MemFdCreateFlag

impl FromIterator<Flags> for Flags
[src]

[src]

impl<F> FromIterator<F> for FuturesUnordered<F> where
    F: Future
[src]

[src]

impl<F> FromIterator<F> for FuturesOrdered<F> where
    F: Future
[src]

[src]

Implementors