Iterator::collect()

Iterator::collect()

fn collect<B>(self) -> B
where
    B: FromIterator<Self::Item>, 

IteratorをCollectionに変換する。 collect()で変換できるCollectionはFromIterator<Self::Item>トレイトが実装されている必要がある。

Trait std::iter::FromIterator

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

Iteratorから型を生成できることを表す。 FromIterator::from_iter()メソッドを直接呼ぶことはなく、Iterator::collect()メソッドを通して使用する。

反対のトレイトとして、IntoIteratorがある。

Vec<_> への変換

impl<T> FromIterator<T> for Vec<T>
let five_fives = std::iter::repeat(5).take(5);
let v: Vec<i32> = five_fives.collect();

[char]からStringの生成

impl FromIterator<char> for String
let chars = ['h', 'e', 'l', 'l', 'o'];
let text = chars.iter().collect::<String>();