Expand description

Extra iterator adaptors, functions and macros.

To extend Iterator with methods in this crate, import the Itertools trait:

use itertools::Itertools;

Now, new methods like interleave are available on all iterators:

use itertools::Itertools;

let it = (1..3).interleave(vec![-1, -2]);
itertools::assert_equal(it, vec![1, -1, 2, -2]);

Most iterator methods are also provided as functions (with the benefit that they convert parameters using IntoIterator):

use itertools::interleave;

for elt in interleave(&[1, 2, 3], &[2, 3, 4]) {
    /* loop body */

Crate Features

  • use_std
    • Enabled by default.
    • Disable to compile itertools using #![no_std]. This disables any items that depend on collections (like group_by, unique, kmerge, join and many more).

Rust Version

This version of itertools requires Rust 1.24 or later.


pub use structs::*;


adaptors 🔒

Licensed under the Apache License, Version 2.0 http://www.apache.org/licenses/LICENSE-2.0 or the MIT license http://opensource.org/licenses/MIT, at your option. This file may not be copied, modified, or distributed except according to those terms.

diff 🔒

“Diff“ing iterators for caching elements to sequential collections without requiring the new elements’ iterator to be Clone.

format 🔒
group_map 🔒

Implementation’s internal macros

merge_join 🔒
minmax 🔒
pad_tail 🔒
repeatn 🔒
size_hint 🔒

Arithmetic on Iterator .size_hint() values.

sources 🔒

Iterators that are sources (produce elements from parameters, not from another iterator).

The concrete iterator types.

tee 🔒
tuple_impl 🔒

Some iterator that produces tuples

ziptuple 🔒


Create an iterator over the “cartesian product” of iterators.

Create an iterator running multiple iterators in lockstep.


A type returned by the diff_with function.

The enum Either with variants Left and Right is a general purpose sum type with two cases.

Value that either holds a single A or B, or both.

An enum used for controlling the execution of .fold_while().

MinMaxResult is an enum returned by minmax. See Itertools::minmax() for more detail.

A value yielded by WithPosition. Indicates the position of this element in the iterator results.


An Iterator blanket implementation that provides extra adaptors and methods.

An iterator that allows peeking at an element before deciding to accept it.


Test whether the predicate holds for all elements in the iterable.

Test whether the predicate holds for any elements in the iterable.

Assert that two iterables produce equal sequences, with the same semantics as equal(a, b).

Create an iterator that first iterates i and then j.

Create an iterator that clones each element from &T to T

Combine all an iterator’s elements into one element by using Extend.

Create an iterator that maps for example iterators of ((A, B), C) to (A, B, C).

Compares every element yielded by both i and j with the given function in lock-step and returns a Diff which describes how j differs from i.

Iterate iterable with a running index.

Return true if both iterables produce equal sequences (elements pairwise equal and sequences of the same length), false otherwise.

Perform a fold operation over the iterable.

Create an iterator that interleaves elements in i and j.

Creates a new iterator that infinitely applies function to value and yields results.

Combine all iterator elements into one String, seperated by sep.

Create an iterator that merges elements of the contained iterators using the ordering function.

Create an iterator that merges elements of the contained iterators.

Return the maximum value of the iterable.

Create an iterator that merges elements in i and j.

Return an iterator adaptor that merge-joins items from the two base iterators in ascending order.

Return the minimum value of the iterable.

An iterator adaptor that allows the user to peek at multiple .next() values without advancing the base iterator.

An iterator that generalizes .zip() and allows running multiple iterators in lockstep.

Partition a sequence using predicate pred so that elements that map to true are placed before elements which map to false.

“Lift” a function of the values of an iterator so that it can process an iterator of Result values instead.

Create an iterator where you can put back a single item

Create an iterator where you can put back multiple values to the front of the iteration.

Return an iterator inside a Rc<RefCell<_>> wrapper.


An iterator source that produces elements indefinitely by calling a given closure.

Create an iterator that produces n repetitions of element.

Iterate iterable in reverse.

Sort all iterator elements into a new iterator in ascending order.

Creates a new unfold source with the specified closure as the “iterator function” and an initial state to eventually pass to the closure

Iterate i and j in lock step.

Iterate i and j in lock step.

Type Definitions