Struct std::iter::Peekable [] [src]

#[must_use = "iterator adaptors are lazy and do nothing unless consumed"]
pub struct Peekable<I> where I: Iterator {
    // some fields omitted
}

An iterator with a peek() that returns an optional reference to the next element.

This struct is created by the peekable() method on Iterator. See its documentation for more.

Methods

impl<I> Peekable<I> where I: Iterator

fn peek(&mut self) -> Option<&I::Item>

Returns a reference to the next() value without advancing the iterator.

The peek() method will return the value that a call to next() would return, but does not advance the iterator. Like next(), if there is a value, it's wrapped in a Some(T), but if the iterator is over, it will return None.

Because peek() returns reference, and many iterators iterate over references, this leads to a possibly confusing situation where the return value is a double reference. You can see this effect in the examples below, with &&i32.

Examples

Basic usage:

let xs = [1, 2, 3];

let mut iter = xs.iter().peekable();

// peek() lets us see into the future
assert_eq!(iter.peek(), Some(&&1));
assert_eq!(iter.next(), Some(&1));

assert_eq!(iter.next(), Some(&2));

// we can peek() multiple times, the itererator won't advance
assert_eq!(iter.peek(), Some(&&3));
assert_eq!(iter.peek(), Some(&&3));

assert_eq!(iter.next(), Some(&3));

// after the itererator is finished, so is peek()
assert_eq!(iter.peek(), None);
assert_eq!(iter.next(), None);

fn is_empty(&mut self) -> bool

Unstable (core)

: the libcore library has not yet been scrutinized for stabilization in terms of structure and naming

Checks if the iterator has finished iterating.

Returns true if there are no more elements in the iterator, and false if there are.

Examples

Basic usage:

#![feature(core)]

let xs = [1, 2, 3];

let mut iter = xs.iter().peekable();

// there are still elements to iterate over
assert_eq!(iter.is_empty(), false);

// let's consume the iterator
iter.next();
iter.next();
iter.next();

assert_eq!(iter.is_empty(), true);

Trait Implementations

impl<I> Iterator for Peekable<I> where I: Iterator

type Item = I::Item

fn next(&mut self) -> Option<I::Item>

fn count(self) -> usize

fn nth(&mut self, n: usize) -> Option<I::Item>

fn last(self) -> Option<I::Item>

fn size_hint(&self) -> (usize, Option<usize>)

fn chain<U>(self, other: U) -> Chain<Self, U::IntoIter> where U: IntoIterator<Item=Self::Item>

fn zip<U>(self, other: U) -> Zip<Self, U::IntoIter> where U: IntoIterator

fn map<B, F>(self, f: F) -> Map<Self, F> where F: FnMut(Self::Item) -> B

fn filter<P>(self, predicate: P) -> Filter<Self, P> where P: FnMut(&Self::Item) -> bool

fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F> where F: FnMut(Self::Item) -> Option<B>

fn enumerate(self) -> Enumerate<Self>

fn peekable(self) -> Peekable<Self>

fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P> where P: FnMut(&Self::Item) -> bool

fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P> where P: FnMut(&Self::Item) -> bool

fn skip(self, n: usize) -> Skip<Self>

fn take(self, n: usize) -> Take<Self>

fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F> where F: FnMut(&mut St, Self::Item) -> Option<B>

fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F> where F: FnMut(Self::Item) -> U, U: IntoIterator

fn fuse(self) -> Fuse<Self>

fn inspect<F>(self, f: F) -> Inspect<Self, F> where F: FnMut(&Self::Item) -> ()

fn by_ref(&mut self) -> &mut Self

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

fn partition<B, F>(self, f: F) -> (B, B) where B: Default + Extend<Self::Item>, F: FnMut(&Self::Item) -> bool

fn fold<B, F>(self, init: B, f: F) -> B where F: FnMut(B, Self::Item) -> B

fn all<F>(&mut self, f: F) -> bool where F: FnMut(Self::Item) -> bool

fn any<F>(&mut self, f: F) -> bool where F: FnMut(Self::Item) -> bool

fn find<P>(&mut self, predicate: P) -> Option<Self::Item> where P: FnMut(&Self::Item) -> bool

fn position<P>(&mut self, predicate: P) -> Option<usize> where P: FnMut(Self::Item) -> bool

fn rposition<P>(&mut self, predicate: P) -> Option<usize> where P: FnMut(Self::Item) -> bool, Self: ExactSizeIterator + DoubleEndedIterator

fn max(self) -> Option<Self::Item> where Self::Item: Ord

fn min(self) -> Option<Self::Item> where Self::Item: Ord

fn max_by<B, F>(self, f: F) -> Option<Self::Item> where B: Ord, F: FnMut(&Self::Item) -> B

fn min_by<B, F>(self, f: F) -> Option<Self::Item> where F: FnMut(&Self::Item) -> B, B: Ord

fn rev(self) -> Rev<Self> where Self: DoubleEndedIterator

fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB) where Self: Iterator<Item=(A, B)>, FromB: Default + Extend<B>, FromA: Default + Extend<A>

fn cloned<'a, T>(self) -> Cloned<Self> where T: 'a + Clone, Self: Iterator<Item=&'a T>

fn cycle(self) -> Cycle<Self> where Self: Clone

fn sum<S = Self::Item>(self) -> S where S: Add<Self::Item, Output=S> + Zero

fn product<P = Self::Item>(self) -> P where P: Mul<Self::Item, Output=P> + One

fn cmp<I>(self, other: I) -> Ordering where I: IntoIterator<Item=Self::Item>, Self::Item: Ord

fn partial_cmp<I>(self, other: I) -> Option<Ordering> where I: IntoIterator, Self::Item: PartialOrd<I::Item>

fn eq<I>(self, other: I) -> bool where I: IntoIterator, Self::Item: PartialEq<I::Item>

fn ne<I>(self, other: I) -> bool where I: IntoIterator, Self::Item: PartialEq<I::Item>

fn lt<I>(self, other: I) -> bool where I: IntoIterator, Self::Item: PartialOrd<I::Item>

fn le<I>(self, other: I) -> bool where I: IntoIterator, Self::Item: PartialOrd<I::Item>

fn gt<I>(self, other: I) -> bool where I: IntoIterator, Self::Item: PartialOrd<I::Item>

fn ge<I>(self, other: I) -> bool where I: IntoIterator, Self::Item: PartialOrd<I::Item>

impl<I> ExactSizeIterator for Peekable<I> where I: ExactSizeIterator

fn len(&self) -> usize

Derived Implementations

impl<I> Clone for Peekable<I> where I: Clone + Iterator, I::Item: Clone

fn clone(&self) -> Peekable<I>

fn clone_from(&mut self, source: &Self)