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]

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

Implementors

impl<I, P> IteratorOptionalFilterExt<P> for I where
    I: Iterator,
    P: FnMut(&I::Item) -> bool
[src]