Trait iter_opt_filter::IteratorOptionalFilterExt [−][src]
pub trait IteratorOptionalFilterExt<P: FnMut(&Self::Item) -> bool>: Iterator + Sized { fn optional_filter(self, predicate: Option<P>) -> OptionalFilter<Self, P>ⓘ{ ... } }Notable traits for OptionalFilter<I, P>
impl<I, P> Iterator for OptionalFilter<I, P> where
I: Iterator,
P: FnMut(&I::Item) -> bool, type Item = I::Item;
Expand description
Extension trait for adding the optional_filter method to iterators.
Provided methods
fn optional_filter(self, predicate: Option<P>) -> OptionalFilter<Self, P>ⓘNotable traits for OptionalFilter<I, P>
impl<I, P> Iterator for OptionalFilter<I, P> where
I: Iterator,
P: FnMut(&I::Item) -> bool, type Item = I::Item;
[src]
fn optional_filter(self, predicate: Option<P>) -> OptionalFilter<Self, P>ⓘNotable traits for OptionalFilter<I, P>
impl<I, P> Iterator for OptionalFilter<I, P> where
I: Iterator,
P: FnMut(&I::Item) -> bool, type Item = I::Item;
[src]Filters the iterator with the predicate, like filter. If the predicate is None
, all items will be returned.
Examples
Basic usage:
use iter_opt_filter::IteratorOptionalFilterExt; let mut iter = (0..3).optional_filter(Some(|&item: &usize| item % 2 == 0)); assert_eq!(iter.next(), Some(0)); assert_eq!(iter.next(), Some(2)); assert_eq!(iter.next(), None); let mut iter = (0..3).optional_filter(None::<fn(&usize) -> bool>); assert_eq!(iter.next(), Some(0)); assert_eq!(iter.next(), Some(1)); assert_eq!(iter.next(), Some(2)); assert_eq!(iter.next(), None);
Because the type stays the same, regardless of the predicate being Some
or None
, the filters are easily chainable:
use iter_opt_filter::IteratorOptionalFilterExt; let mut iter = (0..3) .optional_filter(Some(|&item: &usize| item % 2 == 0)) .optional_filter(None::<fn(&usize) -> bool>) .optional_filter(Some(|&item: &usize| item > 1)); assert_eq!(iter.next(), Some(2)); assert_eq!(iter.next(), None);