Trait geng::prelude::itertools::__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§
sourcefn from_iter<T>(iter: T) -> Selfwhere
T: IntoIterator<Item = A>,
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
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]);
Object Safety§
Implementors§
impl FromIterator<(Value, Value)> for geng::prelude::ron::Map
impl FromIterator<(String, Value)> for geng::prelude::serde_json::Map<String, Value>
impl FromIterator<(String, Value)> for geng::prelude::toml::map::Map<String, Value>
impl FromIterator<char> for String
impl FromIterator<char> for SmolStr
impl FromIterator<u8> for bytes::bytes::Bytes
impl FromIterator<u8> for bytes::bytes::BytesMut
impl FromIterator<u8> for Bytes
impl FromIterator<u8> for BytesMut
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());
impl FromIterator<Extensions> for Extensions
impl FromIterator<Box<str>> for String
impl FromIterator<String> for String
impl FromIterator<String> for SmolStr
impl FromIterator<OsString> for OsString
impl FromIterator<Access> for Access
impl FromIterator<Access> for Access
impl FromIterator<AccessFlags> for AccessFlags
impl FromIterator<Anchor> for Anchor
impl FromIterator<Anchor> for Anchor
impl FromIterator<Api> for Api
impl FromIterator<AtFlags> for AtFlags
impl FromIterator<AtFlags> for AtFlags
impl FromIterator<AtFlags> for AtFlags
impl FromIterator<CapabilitiesSecureBits> for CapabilitiesSecureBits
impl FromIterator<Capability> for Capability
impl FromIterator<Capability> for Capability
impl FromIterator<Capability> for Capability
impl FromIterator<CapabilityFlags> for CapabilityFlags
impl FromIterator<Channels> for Channels
impl FromIterator<ConfigSurfaceTypes> for ConfigSurfaceTypes
impl FromIterator<ConstraintAdjustment> for ConstraintAdjustment
impl FromIterator<ContentHint> for ContentHint
impl FromIterator<ContentHint> for ContentHint
impl FromIterator<ContentHint> for ContentHint
impl FromIterator<ControlModes> for ControlModes
impl FromIterator<CreateFlags> for CreateFlags
impl FromIterator<CreateFlags> for CreateFlags
impl FromIterator<CreateFlags> for CreateFlags
impl FromIterator<CreateFlags> for CreateFlags
impl FromIterator<DisplayFeatures> for DisplayFeatures
impl FromIterator<DndAction> for DndAction
impl FromIterator<DupFlags> for DupFlags
impl FromIterator<DupFlags> for DupFlags
impl FromIterator<EfdFlags> for EfdFlags
impl FromIterator<EfdFlags> for EfdFlags
impl FromIterator<EpollCreateFlags> for EpollCreateFlags
impl FromIterator<EpollCreateFlags> for EpollCreateFlags
impl FromIterator<EpollFlags> for EpollFlags
impl FromIterator<EpollFlags> for EpollFlags
impl FromIterator<EventFlags> for EventFlags
impl FromIterator<EventFlags> for EventFlags
impl FromIterator<EventMask> for EventMask
impl FromIterator<EventMask> for EventMask
impl FromIterator<EventfdFlags> for EventfdFlags
impl FromIterator<EventfdFlags> for EventfdFlags
impl FromIterator<FallocateFlags> for FallocateFlags
impl FromIterator<FallocateFlags> for FallocateFlags
impl FromIterator<FallocateFlags> for FallocateFlags
impl FromIterator<FdFlag> for FdFlag
impl FromIterator<FdFlags> for FdFlags
impl FromIterator<FdFlags> for FdFlags
impl FromIterator<Flags> for Flags
impl FromIterator<Flags> for Flags
impl FromIterator<Flags> for Flags
impl FromIterator<FloatingPointEmulationControl> for FloatingPointEmulationControl
impl FromIterator<FloatingPointExceptionMode> for FloatingPointExceptionMode
impl FromIterator<FsFlags> for FsFlags
impl FromIterator<FutexFlags> for FutexFlags
impl FromIterator<InputModes> for InputModes
impl FromIterator<Kind> for Kind
impl FromIterator<Literal> for Seq
impl FromIterator<LocalModes> for LocalModes
impl FromIterator<MRemapFlags> for MRemapFlags
impl FromIterator<MapFlags> for MapFlags
impl FromIterator<MemFdCreateFlag> for MemFdCreateFlag
impl FromIterator<MembarrierQuery> for MembarrierQuery
impl FromIterator<MemfdFlags> for MemfdFlags
impl FromIterator<MemfdFlags> for MemfdFlags
impl FromIterator<MlockAllFlags> for MlockAllFlags
impl FromIterator<Mode> for Mode
impl FromIterator<Mode> for Mode
impl FromIterator<Mode> for Mode
impl FromIterator<Mode> for Mode
impl FromIterator<ModifiersState> for ModifiersState
impl FromIterator<MountFlags> for MountFlags
impl FromIterator<MountFlags> for MountFlags
impl FromIterator<MountPropagationFlags> for MountPropagationFlags
impl FromIterator<MountPropagationFlags> for MountPropagationFlags
impl FromIterator<MsFlags> for MsFlags
impl FromIterator<MsgFlags> for MsgFlags
impl FromIterator<OFlag> for OFlag
impl FromIterator<OFlags> for OFlags
impl FromIterator<OFlags> for OFlags
impl FromIterator<OutputModes> for OutputModes
impl FromIterator<PidfdFlags> for PidfdFlags
impl FromIterator<PidfdGetfdFlags> for PidfdGetfdFlags
impl FromIterator<PipeFlags> for PipeFlags
impl FromIterator<PipeFlags> for PipeFlags
impl FromIterator<PollFlags> for PollFlags
impl FromIterator<PollFlags> for PollFlags
impl FromIterator<PollFlags> for PollFlags
impl FromIterator<PortCap> for PortCap
impl FromIterator<PortType> for PortType
impl FromIterator<ProtFlags> for ProtFlags
impl FromIterator<ReadWriteFlags> for ReadWriteFlags
impl FromIterator<ReadWriteFlags> for ReadWriteFlags
impl FromIterator<RecvFlags> for RecvFlags
impl FromIterator<Remove> for Remove
impl FromIterator<RenameFlags> for RenameFlags
impl FromIterator<RenameFlags> for RenameFlags
impl FromIterator<RenameFlags> for RenameFlags
impl FromIterator<Resize> for Resize
impl FromIterator<ResolveFlags> for ResolveFlags
impl FromIterator<ResolveFlags> for ResolveFlags
impl FromIterator<SFlag> for SFlag
impl FromIterator<SealFlag> for SealFlag
impl FromIterator<SealFlags> for SealFlags
impl FromIterator<SealFlags> for SealFlags
impl FromIterator<SendFlags> for SendFlags
impl FromIterator<ShmOFlags> for ShmOFlags
impl FromIterator<SockFlag> for SockFlag
impl FromIterator<SocketFlags> for SocketFlags
impl FromIterator<SpeculationFeatureControl> for SpeculationFeatureControl
impl FromIterator<SpeculationFeatureState> for SpeculationFeatureState
impl FromIterator<SpliceFlags> for SpliceFlags
impl FromIterator<SpliceFlags> for SpliceFlags
impl FromIterator<StatVfsMountFlags> for StatVfsMountFlags
impl FromIterator<StatVfsMountFlags> for StatVfsMountFlags
impl FromIterator<StatxFlags> for StatxFlags
impl FromIterator<StatxFlags> for StatxFlags
impl FromIterator<Table> for ArrayOfTables
impl FromIterator<TaggedAddressMode> for TaggedAddressMode
impl FromIterator<ThreadNameSpaceType> for ThreadNameSpaceType
impl FromIterator<TimerfdFlags> for TimerfdFlags
impl FromIterator<TimerfdTimerFlags> for TimerfdTimerFlags
impl FromIterator<TimestampingFlag> for TimestampingFlag
impl FromIterator<TrancheFlags> for TrancheFlags
impl FromIterator<Transformations> for Transformations
impl FromIterator<Transient> for Transient
impl FromIterator<UnalignedAccessControl> for UnalignedAccessControl
impl FromIterator<UnmountFlags> for UnmountFlags
impl FromIterator<UnmountFlags> for UnmountFlags
impl FromIterator<WaitOptions> for WaitOptions
impl FromIterator<WaitidOptions> for WaitidOptions
impl FromIterator<WatchFlags> for WatchFlags
impl FromIterator<WatchFlags> for WatchFlags
impl FromIterator<WatchMask> for WatchMask
impl FromIterator<WatchMask> for WatchMask
impl FromIterator<WindowButtons> for WindowButtons
impl FromIterator<WindowManagerCapabilities> for WindowManagerCapabilities
impl FromIterator<WindowState> for WindowState
impl FromIterator<XattrFlags> for XattrFlags
impl FromIterator<XattrFlags> for XattrFlags
impl FromIterator<xkb_state_component> for xkb_state_component
impl<'a> FromIterator<&'a char> for String
impl<'a> FromIterator<&'a str> for String
impl<'a> FromIterator<&'a str> for SmolStr
impl<'a> FromIterator<&'a u8> for bytes::bytes::Bytes
impl<'a> FromIterator<&'a u8> for bytes::bytes::BytesMut
impl<'a> FromIterator<&'a u8> for BytesMut
impl<'a> FromIterator<&'a String> for SmolStr
impl<'a> FromIterator<&'a OsStr> for OsString
impl<'a> FromIterator<Cow<'a, str>> for String
impl<'a> FromIterator<Cow<'a, OsStr>> for OsString
impl<'a> FromIterator<char> for Cow<'a, str>
impl<'a> FromIterator<String> for Cow<'a, str>
impl<'a, 'b> FromIterator<&'b str> for Cow<'a, str>
impl<'a, T> FromIterator<T> for Cow<'a, [T]>where
T: Clone,
impl<A> FromIterator<<A as Array>::Item> for ArrayVec<A>where
A: Array,
impl<A> FromIterator<<A as Array>::Item> for SmallVec<A>where
A: Array,
impl<A> FromIterator<<A as Array>::Item> for TinyVec<A>where
A: Array,
impl<A, E, V> FromIterator<Result<A, E>> for Result<V, E>where
V: FromIterator<A>,
impl<A, V> FromIterator<Option<A>> for Option<V>where
V: FromIterator<A>,
impl<F> FromIterator<F> for JoinAll<F>where
F: Future,
impl<F> FromIterator<F> for TryJoinAll<F>where
F: TryFuture,
impl<Fut> FromIterator<Fut> for geng::prelude::futures::prelude::future::SelectAll<Fut>
impl<Fut> FromIterator<Fut> for SelectOk<Fut>
impl<Fut> FromIterator<Fut> for FuturesOrdered<Fut>where
Fut: Future,
impl<Fut> FromIterator<Fut> for FuturesUnordered<Fut>
impl<I> FromIterator<I> for Box<[I]>
impl<K, V> FromIterator<(K, V)> for geng::prelude::serde_json::Value
impl<K, V> FromIterator<(K, V)> for BTreeMap<K, V>where
K: Ord,
impl<K, V> FromIterator<(K, V)> for AHashMap<K, V>
impl<K, V> FromIterator<(K, V)> for InlineTable
impl<K, V> FromIterator<(K, V)> for Table
impl<K, V> FromIterator<(K, V)> for Value
impl<K, V, S> FromIterator<(K, V)> for geng::prelude::HashMap<K, V, S>
impl<K, V, S> FromIterator<(K, V)> for IndexMap<K, V, S>
impl<K, V, S, A> FromIterator<(K, V)> for HashMap<K, V, S, A>
impl<P> FromIterator<P> for std::path::PathBuf
impl<P> FromIterator<P> for PathBufwhere
P: AsRef<Path>,
impl<St> FromIterator<St> for geng::prelude::futures::prelude::stream::SelectAll<St>
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');
impl<T> FromIterator<(HeaderName, T)> for HeaderMap<T>
impl<T> FromIterator<Steal<T>> for Steal<T>
impl<T> FromIterator<T> for geng::prelude::serde_json::Value
impl<T> FromIterator<T> for Arc<[T]>
impl<T> FromIterator<T> for Collection<T>where
T: HasId,
impl<T> FromIterator<T> for Rc<[T]>
impl<T> FromIterator<T> for BinaryHeap<T>where
T: Ord,
impl<T> FromIterator<T> for BTreeSet<T>where
T: Ord,
impl<T> FromIterator<T> for LinkedList<T>
impl<T> FromIterator<T> for VecDeque<T>
impl<T> FromIterator<T> for Vec<T>
impl<T> FromIterator<T> for AHashSet<T>
impl<T, N> FromIterator<T> for GenericArray<T, N>where
N: ArrayLength<T>,
impl<T, S> FromIterator<T> for geng::prelude::HashSet<T, S>
impl<T, S> FromIterator<T> for IndexSet<T, S>
impl<T, S, A> FromIterator<T> for HashSet<T, S, A>
impl<T, const CAP: usize> FromIterator<T> for arrayvec::arrayvec::ArrayVec<T, CAP>
Create an ArrayVec
from an iterator.
Panics if the number of elements in the iterator exceeds the arrayvec’s capacity.