Trait otter_api_tests::iter::FromIterator 1.0.0[−][src]
pub trait FromIterator<A> {
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.
FromIterator::from_iter() is rarely called explicitly, and is instead
used through Iterator::collect() method. See Iterator::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 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]);
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
fn from_iter<T>(iter: T) -> Self where
T: IntoIterator<Item = A>,
fn from_iter<T>(iter: T) -> Self where
T: IntoIterator<Item = A>, 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
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());
pub fn from_iter<T>(iter: T) -> Box<[I], Global>ⓘNotable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<I, A> Iterator for Box<I, A> where
A: Allocator,
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<F, A> Future for Box<F, A> where
A: Allocator + 'static,
F: Future + Unpin + ?Sized, type Output = <F as Future>::Output; where
T: IntoIterator<Item = I>, Takes each element in the Iterator and collects it into an Rc<[T]>.
Performance characteristics
The general case
In the general case, collecting into Rc<[T]> is done by first
collecting into a Vec<T>. That is, when writing the following:
let evens: Rc<[u8]> = (0..10).filter(|&x| x % 2 == 0).collect();
this behaves as if we wrote:
let evens: Rc<[u8]> = (0..10).filter(|&x| x % 2 == 0) .collect::<Vec<_>>() // The first set of allocations happens here. .into(); // A second allocation for `Rc<[T]>` happens here.
This will allocate as many times as needed for constructing the Vec<T>
and then it will allocate once for turning the Vec<T> into the Rc<[T]>.
Iterators of known length
When your Iterator implements TrustedLen and is of an exact size,
a single allocation will be made for the Rc<[T]>. For example:
let evens: Rc<[u8]> = (0..10).collect(); // Just a single allocation happens here.
impl FromIterator<Op> for Op
impl FromIterator<Op> for Oppub fn from_iter<T>(iterator: T) -> Op where
T: IntoIterator<Item = Op>, impl<T> FromIterator<(usize, T)> for Slab<T>
impl<T> FromIterator<(usize, T)> for Slab<T>Create a slab from an iterator of key-value pairs.
If the iterator produces duplicate keys, the previous value is replaced with the later one.
The keys does not need to be sorted beforehand, and this function always
takes O(n) time.
Note that the returned slab will use space proportional to the largest key,
so don’t use Slab with untrusted keys.
Examples
let vec = vec![(2,'a'), (6,'b'), (7,'c')]; let slab = vec.into_iter().collect::<Slab<char>>(); assert_eq!(slab.len(), 3); assert!(slab.capacity() >= 8); assert_eq!(slab[2], 'a');
With duplicate and unsorted keys:
let vec = vec![(20,'a'), (10,'b'), (11,'c'), (10,'d')]; let slab = vec.into_iter().collect::<Slab<char>>(); assert_eq!(slab.len(), 3); assert_eq!(slab[10], 'd');
pub fn from_iter<I>(iterable: I) -> Slab<T> where
I: IntoIterator<Item = (usize, T)>, impl FromIterator<EventMask> for EventMask
impl FromIterator<EventMask> for EventMaskpub fn from_iter<T>(iterator: T) -> EventMask where
T: IntoIterator<Item = EventMask>, impl FromIterator<WatchMask> for WatchMask
impl FromIterator<WatchMask> for WatchMaskpub fn from_iter<T>(iterator: T) -> WatchMask where
T: IntoIterator<Item = WatchMask>, impl<I, A> FromIterator<A> for Box<IndexSlice<I, [A]>, Global> where
I: Idx,
impl<I, A> FromIterator<A> for Box<IndexSlice<I, [A]>, Global> where
I: Idx, pub fn from_iter<T>(iter: T) -> Box<IndexSlice<I, [A]>, Global>ⓘNotable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<I, A> Iterator for Box<I, A> where
A: Allocator,
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<F, A> Future for Box<F, A> where
A: Allocator + 'static,
F: Future + Unpin + ?Sized, type Output = <F as Future>::Output; where
T: IntoIterator<Item = A>, impl<A> FromIterator<<A as Array>::Item> for SmallVec<A> where
A: Array,
impl<A> FromIterator<<A as Array>::Item> for SmallVec<A> where
A: Array, pub fn from_iter<I>(iterable: I) -> SmallVec<A> where
I: IntoIterator<Item = <A as Array>::Item>, impl FromIterator<FileType> for FileType
impl FromIterator<FileType> for FileTypepub fn from_iter<T>(iterator: T) -> FileType where
T: IntoIterator<Item = FileType>, impl FromIterator<u8> for BString
impl FromIterator<u8> for BStringpub fn from_iter<T>(iter: T) -> BString where
T: IntoIterator<Item = u8>, impl<'a> FromIterator<&'a BStr> for BString
impl<'a> FromIterator<&'a BStr> for BStringpub fn from_iter<T>(iter: T) -> BString where
T: IntoIterator<Item = &'a BStr>, impl FromIterator<BString> for BString
impl FromIterator<BString> for BStringpub fn from_iter<T>(iter: T) -> BString where
T: IntoIterator<Item = BString>, impl<'a> FromIterator<&'a str> for BString
impl<'a> FromIterator<&'a str> for BStringpub fn from_iter<T>(iter: T) -> BString where
T: IntoIterator<Item = &'a str>, impl FromIterator<char> for BString
impl FromIterator<char> for BStringpub fn from_iter<T>(iter: T) -> BString where
T: IntoIterator<Item = char>, impl<'a> FromIterator<&'a [u8]> for BString
impl<'a> FromIterator<&'a [u8]> for BStringpub fn from_iter<T>(iter: T) -> BString where
T: IntoIterator<Item = &'a [u8]>, impl<A> FromIterator<<A as Array>::Item> for TinyVec<A> where
A: Array,
impl<A> FromIterator<<A as Array>::Item> for TinyVec<A> where
A: Array, pub fn from_iter<T>(iter: T) -> TinyVec<A> where
T: IntoIterator<Item = <A as Array>::Item>, impl<A> FromIterator<<A as Array>::Item> for ArrayVec<A> where
A: Array,
impl<A> FromIterator<<A as Array>::Item> for ArrayVec<A> where
A: Array, pub fn from_iter<T>(iter: T) -> ArrayVec<A> where
T: IntoIterator<Item = <A as Array>::Item>, impl FromIterator<Transformations> for Transformations
impl FromIterator<Transformations> for Transformationspub fn from_iter<T>(iterator: T) -> Transformations where
T: IntoIterator<Item = Transformations>, impl<V> FromIterator<(usize, V)> for VecMap<V>
impl<V> FromIterator<(usize, V)> for VecMap<V>pub fn from_iter<I>(iter: I) -> VecMap<V> where
I: IntoIterator<Item = (usize, V)>, impl<Fut> FromIterator<Fut> for FuturesUnordered<Fut>
impl<Fut> FromIterator<Fut> for FuturesUnordered<Fut>pub fn from_iter<I>(iter: I) -> FuturesUnordered<Fut> where
I: IntoIterator<Item = Fut>, impl<Fut> FromIterator<Fut> for FuturesOrdered<Fut> where
Fut: Future,
impl<Fut> FromIterator<Fut> for FuturesOrdered<Fut> where
Fut: Future, pub fn from_iter<T>(iter: T) -> FuturesOrdered<Fut> where
T: IntoIterator<Item = Fut>, impl<St> FromIterator<St> for SelectAll<St> where
St: Stream + Unpin,
impl<St> FromIterator<St> for SelectAll<St> where
St: Stream + Unpin, pub fn from_iter<T>(iter: T) -> SelectAll<St> where
T: IntoIterator<Item = St>, impl<Fut> FromIterator<Fut> for SelectOk<Fut> where
Fut: TryFuture + Unpin,
impl<Fut> FromIterator<Fut> for SelectOk<Fut> where
Fut: TryFuture + Unpin, impl<F> FromIterator<F> for JoinAll<F> where
F: Future,
impl<F> FromIterator<F> for JoinAll<F> where
F: Future, impl<Fut> FromIterator<Fut> for SelectAll<Fut> where
Fut: Future + Unpin,
impl<Fut> FromIterator<Fut> for SelectAll<Fut> where
Fut: Future + Unpin, impl<F> FromIterator<F> for TryJoinAll<F> where
F: TryFuture,
impl<F> FromIterator<F> for TryJoinAll<F> where
F: TryFuture, impl<K, V, S> FromIterator<(K, V)> for IndexMap<K, V, S> where
S: BuildHasher + Default,
K: Hash + Eq,
impl<K, V, S> FromIterator<(K, V)> for IndexMap<K, V, S> where
S: BuildHasher + Default,
K: Hash + Eq, impl<T, S, A> FromIterator<T> for HashSet<T, S, A> where
T: Eq + Hash,
S: BuildHasher + Default,
A: Default + Allocator + Clone,
impl<T, S, A> FromIterator<T> for HashSet<T, S, A> where
T: Eq + Hash,
S: BuildHasher + Default,
A: Default + Allocator + Clone, pub fn from_iter<I>(iter: I) -> HashSet<T, S, A> where
I: IntoIterator<Item = T>, impl<K, V, S, A> FromIterator<(K, V)> for HashMap<K, V, S, A> where
S: BuildHasher + Default,
A: Default + Allocator + Clone,
K: Eq + Hash,
impl<K, V, S, A> FromIterator<(K, V)> for HashMap<K, V, S, A> where
S: BuildHasher + Default,
A: Default + Allocator + Clone,
K: Eq + Hash, pub fn from_iter<T>(iter: T) -> HashMap<K, V, S, A> where
T: IntoIterator<Item = (K, V)>, pub fn from_iter<T>(iterator: T) -> X509CheckFlags where
T: IntoIterator<Item = X509CheckFlags>, pub fn from_iter<T>(iterator: T) -> ExtensionContext where
T: IntoIterator<Item = ExtensionContext>, pub fn from_iter<T>(iterator: T) -> X509VerifyFlags where
T: IntoIterator<Item = X509VerifyFlags>, pub fn from_iter<T>(iterator: T) -> SslSessionCacheMode where
T: IntoIterator<Item = SslSessionCacheMode>, impl<'a, F, A> FromIterator<&'a Tendril<F, A>> for Tendril<F, A> where
A: Atomicity,
F: Format + 'a,
impl<'a, F, A> FromIterator<&'a Tendril<F, A>> for Tendril<F, A> where
A: Atomicity,
F: Format + 'a, pub fn from_iter<I>(iterable: I) -> Tendril<F, A>ⓘNotable traits for Tendril<Bytes, A>
impl<A> Write for Tendril<Bytes, A> where
A: Atomicity, where
I: IntoIterator<Item = &'a Tendril<F, A>>, impl<'a, A> FromIterator<&'a u8> for Tendril<Bytes, A> where
A: Atomicity,
impl<'a, A> FromIterator<&'a u8> for Tendril<Bytes, A> where
A: Atomicity, pub fn from_iter<I>(iterable: I) -> Tendril<Bytes, A>ⓘNotable traits for Tendril<Bytes, A>
impl<A> Write for Tendril<Bytes, A> where
A: Atomicity, where
I: IntoIterator<Item = &'a u8>, impl<'a, A> FromIterator<&'a str> for Tendril<UTF8, A> where
A: Atomicity,
impl<'a, A> FromIterator<&'a str> for Tendril<UTF8, A> where
A: Atomicity, pub fn from_iter<I>(iterable: I) -> Tendril<UTF8, A>ⓘNotable traits for Tendril<Bytes, A>
impl<A> Write for Tendril<Bytes, A> where
A: Atomicity, where
I: IntoIterator<Item = &'a str>, impl<A> FromIterator<char> for Tendril<UTF8, A> where
A: Atomicity,
impl<A> FromIterator<char> for Tendril<UTF8, A> where
A: Atomicity, pub fn from_iter<I>(iterable: I) -> Tendril<UTF8, A>ⓘNotable traits for Tendril<Bytes, A>
impl<A> Write for Tendril<Bytes, A> where
A: Atomicity, where
I: IntoIterator<Item = char>, impl<A> FromIterator<u8> for Tendril<Bytes, A> where
A: Atomicity,
impl<A> FromIterator<u8> for Tendril<Bytes, A> where
A: Atomicity, pub fn from_iter<I>(iterable: I) -> Tendril<Bytes, A>ⓘNotable traits for Tendril<Bytes, A>
impl<A> Write for Tendril<Bytes, A> where
A: Atomicity, where
I: IntoIterator<Item = u8>, impl<'a, A> FromIterator<&'a [u8]> for Tendril<Bytes, A> where
A: Atomicity,
impl<'a, A> FromIterator<&'a [u8]> for Tendril<Bytes, A> where
A: Atomicity, impl FromIterator<ElementSelectorFlags> for ElementSelectorFlags
impl FromIterator<ElementSelectorFlags> for ElementSelectorFlagspub fn from_iter<T>(iterator: T) -> ElementSelectorFlags where
T: IntoIterator<Item = ElementSelectorFlags>, Implementors
impl FromIterator<AtFlags> for AtFlagsimpl FromIterator<FallocateFlags> for FallocateFlagsimpl FromIterator<FdFlag> for otter_api_tests::imports::nix::fcntl::FdFlagimpl FromIterator<OFlag> for OFlagimpl FromIterator<RenameFlags> for RenameFlagsimpl FromIterator<SealFlag> for SealFlagimpl FromIterator<SpliceFFlags> for SpliceFFlagsimpl FromIterator<DeleteModuleFlags> for DeleteModuleFlagsimpl FromIterator<ModuleInitFlags> for ModuleInitFlagsimpl FromIterator<MntFlags> for MntFlagsimpl FromIterator<MsFlags> for otter_api_tests::imports::nix::mount::MsFlagsimpl FromIterator<FdFlag> for otter_api_tests::imports::nix::mqueue::FdFlagimpl FromIterator<MQ_OFlag> for MQ_OFlagimpl FromIterator<InterfaceFlags> for InterfaceFlagsimpl FromIterator<PollFlags> for PollFlagsimpl FromIterator<CloneFlags> for CloneFlagsimpl FromIterator<EpollCreateFlags> for EpollCreateFlagsimpl FromIterator<EpollFlags> for EpollFlagsimpl FromIterator<EfdFlags> for EfdFlagsimpl FromIterator<AddWatchFlags> for AddWatchFlagsimpl FromIterator<InitFlags> for InitFlagsimpl FromIterator<MemFdCreateFlag> for MemFdCreateFlagimpl FromIterator<MRemapFlags> for MRemapFlagsimpl FromIterator<MapFlags> for MapFlagsimpl FromIterator<MlockAllFlags> for MlockAllFlagsimpl FromIterator<MsFlags> for otter_api_tests::imports::nix::sys::mman::MsFlagsimpl FromIterator<ProtFlags> for ProtFlagsimpl FromIterator<Persona> for Personaimpl FromIterator<Options> for Optionsimpl FromIterator<QuotaValidFlags> for QuotaValidFlagsimpl FromIterator<SaFlags> for SaFlagsimpl FromIterator<SfdFlags> for SfdFlagsimpl FromIterator<MsgFlags> for MsgFlagsimpl FromIterator<SockFlag> for SockFlagimpl FromIterator<Mode> for Modeimpl FromIterator<SFlag> for SFlagimpl FromIterator<FsFlags> for FsFlagsimpl FromIterator<ControlFlags> for ControlFlagsimpl FromIterator<InputFlags> for InputFlagsimpl FromIterator<LocalFlags> for LocalFlagsimpl FromIterator<OutputFlags> for OutputFlagsimpl FromIterator<TimerFlags> for TimerFlagsimpl FromIterator<TimerSetTimeFlags> for TimerSetTimeFlagsimpl FromIterator<WaitPidFlag> for WaitPidFlagimpl FromIterator<AccessFlags> for AccessFlagsimpl<I, T> FromIterator<T> for IndexVec<I, T> where
I: Idx, impl<K, V, S> FromIterator<(K, V)> for otter_api_tests::shapelib::HashMap<K, V, S> where
S: BuildHasher + Default,
K: Eq + Hash, impl<K, V, S> FromIterator<(K, V)> for SparseSecondaryMap<K, V, S> where
S: BuildHasher + Default,
K: Key, impl<T, N> FromIterator<T> for GenericArray<T, N> where
N: ArrayLength<T>, impl<T, S> FromIterator<T> for otter_api_tests::shapelib::HashSet<T, S> where
T: Eq + Hash,
S: BuildHasher + Default,