@GwtCompatible(emulated=true) public final class Iterators extends Object
Iterator. Except as noted, each method has a corresponding
Iterable-based method in the
Iterables class.
Performance notes: Unless otherwise noted, all of the iterators produced in this class are lazy, which means that they only advance the backing iteration when absolutely necessary.
See the Guava User Guide section on Iterators.
| Modifier and Type | Method and Description |
|---|---|
static <T> boolean |
addAll(Collection
Adds all elements in
iterator to
collection.
|
static int |
advance(Iterator
Calls
next() on
iterator, either
numberToAdvance times or until
hasNext() returns
false, whichever comes first.
|
static <T> boolean |
all(Iterator
Returns
true if every element returned by
iterator satisfies the given predicate.
|
static <T> boolean |
any(Iterator
Returns
true if one or more elements returned by
iterator satisfy the given predicate.
|
static <T> Enumeration |
asEnumeration(Iterator
Adapts an
Iterator to the
Enumeration interface.
|
static <T> Iterator |
concat(Iterator
Combines multiple iterators into a single iterator.
|
static <T> Iterator |
concat(Iterator
Combines multiple iterators into a single iterator.
|
static <T> Iterator |
concat(Iterator
Combines two iterators into a single iterator.
|
static <T> Iterator |
concat(Iterator
Combines three iterators into a single iterator.
|
static <T> Iterator |
concat(Iterator
Combines four iterators into a single iterator.
|
static <T> Iterator |
consumingIterator(Iterator
Returns a view of the supplied
iterator that removes each element from the supplied
iterator as it is returned.
|
static boolean |
contains(Iterator
Returns
true if
iterator contains
element.
|
static <T> Iterator |
cycle(Iterable
Returns an iterator that cycles indefinitely over the elements of
iterable.
|
static <T> Iterator |
cycle(T... elements)
Returns an iterator that cycles indefinitely over the provided elements.
|
static boolean |
elementsEqual(Iterator
Determines whether two iterators contain equal elements in the same order.
|
static <T> UnmodifiableIterator |
emptyIterator()
Deprecated.
Use
ImmutableSet.<T>of().iterator() instead; or for Java 7 or later, Collections. This method is scheduled for removal in May 2016.
|
static <T> UnmodifiableIterator |
filter(Iterator
Returns all instances of class
type in
unfiltered.
|
static <T> UnmodifiableIterator |
filter(Iterator
Returns the elements of
unfiltered that satisfy a predicate.
|
static <T> T |
find(Iterator
Returns the first element in
iterator that satisfies the given predicate.
|
static <T> T |
find(Iterator
Returns the first element in
iterator that satisfies the given predicate; use this method only when such an element is known to exist.
|
static <T> UnmodifiableIterator |
forArray(T... array)
Returns an iterator containing the elements of
array in order.
|
static <T> UnmodifiableIterator |
forEnumeration(Enumeration
Adapts an
Enumeration to the
Iterator interface.
|
static int |
frequency(Iterator
Returns the number of elements in the specified iterator that equal the specified object.
|
static <T> T |
get(Iterator
Advances
iterator
position + 1 times, returning the element at the
positionth position or
defaultValue otherwise.
|
static <T> T |
get(Iterator
Advances
iterator
position + 1 times, returning the element at the
positionth position.
|
static <T> T |
getLast(Iterator
Advances
iterator to the end, returning the last element or
defaultValue if the iterator is empty.
|
static <T> T |
getLast(Iterator
Advances
iterator to the end, returning the last element.
|
static <T> T |
getNext(Iterator
Returns the next element in
iterator or
defaultValue if the iterator is empty.
|
static <T> T |
getOnlyElement(Iterator
Returns the single element contained in
iterator, or
defaultValue if the iterator is empty.
|
static <T> T |
getOnlyElement(Iterator
Returns the single element contained in
iterator.
|
static <T> int |
indexOf(Iterator
Returns the index in
iterator of the first element that satisfies the provided
predicate, or
-1 if the Iterator has no such elements.
|
static <T> Iterator |
limit(Iterator
Creates an iterator returning the first
limitSize elements of the given iterator.
|
static <T> UnmodifiableIterator |
mergeSorted(Iterable
Returns an iterator over the merged contents of all given
iterators, traversing every element of the input iterators.
|
static <T> UnmodifiableIterator |
paddedPartition(Iterator
Divides an iterator into unmodifiable sublists of the given size, padding the final iterator with null values if necessary.
|
static <T> UnmodifiableIterator |
partition(Iterator
Divides an iterator into unmodifiable sublists of the given size (the final list may be smaller).
|
static <T> PeekingIterator |
peekingIterator(Iterator
Returns a
PeekingIterator backed by the given iterator.
|
static <T> PeekingIterator |
peekingIterator(PeekingIterator
Deprecated.
no need to use this
|
static boolean |
removeAll(Iterator
Traverses an iterator and removes every element that belongs to the provided collection.
|
static <T> boolean |
removeIf(Iterator
Removes every element that satisfies the provided predicate from the iterator.
|
static boolean |
retainAll(Iterator
Traverses an iterator and removes every element that does not belong to the provided collection.
|
static <T> UnmodifiableIterator |
singletonIterator(T value)
Returns an iterator containing only
value.
|
static int |
size(Iterator
Returns the number of elements remaining in
iterator.
|
static <T> T[] |
toArray(Iterator
Copies an iterator's elements into an array.
|
static String |
toString(Iterator
Returns a string representation of
iterator, with the format
[e1, e2, ..., en].
|
static <F |
transform(Iterator
Returns an iterator that applies
function to each element of
fromIterator.
|
static <T> Optional |
tryFind(Iterator
Returns an
Optional containing the first element in
iterator that satisfies the given predicate, if such an element exists.
|
static <T> UnmodifiableIterator |
unmodifiableIterator(Iterator
Returns an unmodifiable view of
iterator.
|
static <T> UnmodifiableIterator |
unmodifiableIterator(UnmodifiableIterator
Deprecated.
no need to use this
|
@Deprecated public static <T> UnmodifiableIterator<T> emptyIterator()
ImmutableSet.<T>of().iterator() instead; or for Java 7 or later, Collections.emptyIterator() . This method is scheduled for removal in May 2016.
The Iterable equivalent of this method is ImmutableSet.
public static <T> UnmodifiableIterator<T> unmodifiableIterator(Iterator <T> iterator)
iterator.
@Deprecated public static <T> UnmodifiableIterator<T> unmodifiableIterator(UnmodifiableIterator <T> iterator)
public static int size(Iterator<?> iterator)
iterator. The iterator will be left exhausted: its
hasNext() method will return
false.
public static boolean contains(Iterator<?> iterator, Object element)
true if
iterator contains
element.
public static boolean removeAll(Iterator<?> removeFrom, Collection <?> elementsToRemove)
hasNext() method will return
false.
removeFrom - the iterator to (potentially) remove elements from
elementsToRemove - the elements to remove
true if any element was removed from
iterator
public static <T> boolean removeIf(Iterator<T> removeFrom, Predicate <? super T> predicate)
hasNext() method will return
false.
removeFrom - the iterator to (potentially) remove elements from
predicate - a predicate that determines whether an element should be removed
true if any elements were removed from the iterator
public static boolean retainAll(Iterator<?> removeFrom, Collection <?> elementsToRetain)
hasNext() method will return
false.
removeFrom - the iterator to (potentially) remove elements from
elementsToRetain - the elements to retain
true if any element was removed from
iterator
public static boolean elementsEqual(Iterator<?> iterator1, Iterator <?> iterator2)
true if
iterator1 and
iterator2 contain the same number of elements and every element of
iterator1 is equal to the corresponding element of
iterator2.
Note that this will modify the supplied iterators, since they will have been advanced some number of elements forward.
public static StringtoString(Iterator <?> iterator)
iterator, with the format
[e1, e2, ..., en]. The iterator will be left exhausted: its
hasNext() method will return
false.
public static <T> T getOnlyElement(Iterator<T> iterator)
iterator.
NoSuchElementException - if the iterator is empty
IllegalArgumentException - if the iterator contains multiple elements. The state of the iterator is unspecified.
public static <T> T getOnlyElement(Iterator<? extends T> iterator, T defaultValue)
iterator, or
defaultValue if the iterator is empty.
IllegalArgumentException - if the iterator contains multiple elements. The state of the iterator is unspecified.
@GwtIncompatible(value="Array.newInstance(Class, int)") public static <T> T[] toArray(Iterator<? extends T> iterator, Class <T> type)
hasNext() method will return
false.
iterator - the iterator to copy
type - the type of the elements
public static <T> boolean addAll(Collection<T> addTo, Iterator <? extends T> iterator)
iterator to
collection. The iterator will be left exhausted: its
hasNext() method will return
false.
true if
collection was modified as a result of this operation
public static int frequency(Iterator<?> iterator, Object element)
hasNext() method will return
false.
public static <T> Iterator<T> cycle(Iterable <T> iterable)
iterable.
The returned iterator supports remove() if the provided iterator does. After remove() is called, subsequent cycles omit the removed element, which is no longer in iterable. The iterator's hasNext() method returns true until iterable is empty.
Warning: Typical uses of the resulting iterator may produce an infinite loop. You should use an explicit break or be certain that you will eventually remove all the elements.
public static <T> Iterator<T> cycle(T... elements)
The returned iterator supports remove(). After remove() is called, subsequent cycles omit the removed element, but elements does not change. The iterator's hasNext() method returns true until all of the original elements have been removed.
Warning: Typical uses of the resulting iterator may produce an infinite loop. You should use an explicit break or be certain that you will eventually remove all the elements.
public static <T> Iterator<T> concat(Iterator <? extends T> a, Iterator <? extends T> b)
a, followed by the elements in
b. The source iterators are not polled until necessary.
The returned iterator supports remove() when the corresponding input iterator supports it.
Note: the current implementation is not suitable for nested concatenated iterators, i.e. the following should be avoided when in a loop: iterator = Iterators.concat(iterator, suffix);, since iteration over the resulting iterator has a cubic complexity to the depth of the nesting.
public static <T> Iterator<T> concat(Iterator <? extends T> a, Iterator <? extends T> b, Iterator <? extends T> c)
a, followed by the elements in
b, followed by the elements in
c. The source iterators are not polled until necessary.
The returned iterator supports remove() when the corresponding input iterator supports it.
Note: the current implementation is not suitable for nested concatenated iterators, i.e. the following should be avoided when in a loop: iterator = Iterators.concat(iterator, suffix);, since iteration over the resulting iterator has a cubic complexity to the depth of the nesting.
public static <T> Iterator<T> concat(Iterator <? extends T> a, Iterator <? extends T> b, Iterator <? extends T> c, Iterator <? extends T> d)
a, followed by the elements in
b, followed by the elements in
c, followed by the elements in
d. The source iterators are not polled until necessary.
The returned iterator supports remove() when the corresponding input iterator supports it.
Note: the current implementation is not suitable for nested concatenated iterators, i.e. the following should be avoided when in a loop: iterator = Iterators.concat(iterator, suffix);, since iteration over the resulting iterator has a cubic complexity to the depth of the nesting.
public static <T> Iterator<T> concat(Iterator <? extends T>... inputs)
inputs. The input iterators are not polled until necessary.
The returned iterator supports remove() when the corresponding input iterator supports it.
Note: the current implementation is not suitable for nested concatenated iterators, i.e. the following should be avoided when in a loop: iterator = Iterators.concat(iterator, suffix);, since iteration over the resulting iterator has a cubic complexity to the depth of the nesting.
NullPointerException - if any of the provided iterators is null
public static <T> Iterator<T> concat(Iterator <? extends Iterator <? extends T>> inputs)
inputs. The input iterators are not polled until necessary.
The returned iterator supports remove() when the corresponding input iterator supports it. The methods of the returned iterator may throw NullPointerException if any of the input iterators is null.
Note: the current implementation is not suitable for nested concatenated iterators, i.e. the following should be avoided when in a loop: iterator = Iterators.concat(iterator, suffix);, since iteration over the resulting iterator has a cubic complexity to the depth of the nesting.
public static <T> UnmodifiableIterator<List <T>> partition(Iterator <T> iterator, int size)
[a, b, c, d, e] with a partition size of 3 yields
[[a, b, c], [d, e]] -- an outer iterator containing two inner lists of three and two elements, all in the original order.
The returned lists implement RandomAccess.
iterator - the iterator to return a partitioned view of
size - the desired size of each partition (the last may be smaller)
iterator divided into partitions
IllegalArgumentException - if
size is nonpositive
public static <T> UnmodifiableIterator<List <T>> paddedPartition(Iterator <T> iterator, int size)
[a, b, c, d, e] with a partition size of 3 yields
[[a, b, c], [d, e, null]] -- an outer iterator containing two inner lists of three elements each, all in the original order.
The returned lists implement RandomAccess.
iterator - the iterator to return a partitioned view of
size - the desired size of each partition
iterator divided into partitions (the final iterable may have trailing null elements)
IllegalArgumentException - if
size is nonpositive
public static <T> UnmodifiableIterator<T> filter(Iterator <T> unfiltered, Predicate <? super T> predicate)
unfiltered that satisfy a predicate.
@GwtIncompatible(value="Class.isInstance") public static <T> UnmodifiableIterator<T> filter(Iterator <?> unfiltered, Class <T> type)
type in
unfiltered. The returned iterator has elements whose class is
type or a subclass of
type.
unfiltered - an iterator containing objects of any type
type - the type of elements desired
public static <T> boolean any(Iterator<T> iterator, Predicate <? super T> predicate)
true if one or more elements returned by
iterator satisfy the given predicate.
public static <T> boolean all(Iterator<T> iterator, Predicate <? super T> predicate)
true if every element returned by
iterator satisfies the given predicate. If
iterator is empty,
true is returned.
public static <T> T find(Iterator<T> iterator, Predicate <? super T> predicate)
iterator that satisfies the given predicate; use this method only when such an element is known to exist. If no such element is found, the iterator will be left exhausted: its
hasNext() method will return
false. If it is possible that
no element will match, use
tryFind(java.util.Iterator<T>, com.google.common.base.Predicate<? super T>) or
find(Iterator, Predicate, Object) instead.
NoSuchElementException - if no element in
iterator matches the given predicate
public static <T> T find(Iterator<? extends T> iterator, Predicate <? super T> predicate, T defaultValue)
iterator that satisfies the given predicate. If no such element is found,
defaultValue will be returned from this method and the iterator will be left exhausted: its
hasNext() method will return
false. Note that this can usually be handled more naturally using
tryFind(iterator, predicate).or(defaultValue).
public static <T> Optional<T> tryFind(Iterator <T> iterator, Predicate <? super T> predicate)
Optional containing the first element in
iterator that satisfies the given predicate, if such an element exists. If no such element is found, an empty
Optional will be returned from this method and the iterator will be left exhausted: its
hasNext() method will return
false.
Warning: avoid using a predicate that matches null. If null is matched in iterator, a NullPointerException will be thrown.
public static <T> int indexOf(Iterator<T> iterator, Predicate <? super T> predicate)
iterator of the first element that satisfies the provided
predicate, or
-1 if the Iterator has no such elements.
More formally, returns the lowest index i such that predicate.apply(Iterators.get(iterator, i)) returns true, or -1 if there is no such index.
If -1 is returned, the iterator will be left exhausted: its hasNext() method will return false. Otherwise, the iterator will be set to the element which satisfies the predicate.
public static <F,T> Iterator <T> transform(Iterator <F> fromIterator, Function <? super F ,? extends T> function)
function to each element of
fromIterator.
The returned iterator supports remove() if the provided iterator does. After a successful remove() call, fromIterator no longer contains the corresponding element.
public static <T> T get(Iterator<T> iterator, int position)
iterator
position + 1 times, returning the element at the
positionth position.
position - position of the element to return
iterator
IndexOutOfBoundsException - if
position is negative or greater than or equal to the number of elements remaining in
iterator
public static <T> T get(Iterator<? extends T> iterator, int position, T defaultValue)
iterator
position + 1 times, returning the element at the
positionth position or
defaultValue otherwise.
position - position of the element to return
defaultValue - the default value to return if the iterator is empty or if
position is greater than the number of elements remaining in
iterator
iterator or
defaultValue if
iterator produces fewer than
position + 1 elements.
IndexOutOfBoundsException - if
position is negative
public static <T> T getNext(Iterator<? extends T> iterator, T defaultValue)
iterator or
defaultValue if the iterator is empty. The
Iterables analog to this method is
Iterables.getFirst(java.lang.Iterable<? extends T>, T) .
defaultValue - the default value to return if the iterator is empty
iterator or the default value
public static <T> T getLast(Iterator<T> iterator)
iterator to the end, returning the last element.
iterator
NoSuchElementException - if the iterator is empty
public static <T> T getLast(Iterator<? extends T> iterator, T defaultValue)
iterator to the end, returning the last element or
defaultValue if the iterator is empty.
defaultValue - the default value to return if the iterator is empty
iterator
public static int advance(Iterator<?> iterator, int numberToAdvance)
next() on
iterator, either
numberToAdvance times or until
hasNext() returns
false, whichever comes first.
Iterators.skip)
public static <T> Iterator<T> limit(Iterator <T> iterator, int limitSize)
limitSize elements of the given iterator. If the original iterator does not contain that many elements, the returned iterator will have the same behavior as the original iterator. The returned iterator supports
remove() if the original iterator does.
iterator - the iterator to limit
limitSize - the maximum number of elements in the returned iterator
IllegalArgumentException - if
limitSize is negative
public static <T> Iterator<T> consumingIterator(Iterator <T> iterator)
iterator that removes each element from the supplied
iterator as it is returned.
The provided iterator must support Iterator or else the returned iterator will fail on the first call to next.
iterator - the iterator to remove and return elements from
public static <T> UnmodifiableIterator<T> forArray(T... array)
array in order. The returned iterator is a view of the array; subsequent changes to the array will be reflected in the iterator.
Note: It is often preferable to represent your data using a collection type, for example using Arrays, making this method unnecessary.
The Iterable equivalent of this method is either Arrays, ImmutableList}, or ImmutableList.
public static <T> UnmodifiableIterator<T> singletonIterator(T value)
value.
The Iterable equivalent of this method is Collections.
public static <T> UnmodifiableIterator<T> forEnumeration(Enumeration <T> enumeration)
Enumeration to the
Iterator interface.
This method has no equivalent in Iterables because viewing an Enumeration as an Iterable is impossible. However, the contents can be copied into a collection using Collections.
public static <T> Enumeration<T> asEnumeration(Iterator <T> iterator)
Iterator to the
Enumeration interface.
The Iterable equivalent of this method is either Collections (if you have a Collection), or Iterators.asEnumeration(collection.iterator()).
public static <T> PeekingIterator<T> peekingIterator(Iterator <? extends T> iterator)
PeekingIterator backed by the given iterator.
Calls to the peek method with no intervening calls to next do not affect the iteration, and hence return the same object each time. A subsequent call to next is guaranteed to return the same object again. For example:
PeekingIterator<String> peekingIterator = Iterators.peekingIterator(Iterators.forArray("a", "b")); String a1 = peekingIterator.peek(); // returns "a" String a2 = peekingIterator.peek(); // also returns "a" String a3 = peekingIterator.next(); // also returns "a"
Any structural changes to the underlying iteration (aside from those performed by the iterator's own PeekingIterator method) will leave the iterator in an undefined state.
The returned iterator does not support removal after peeking, as explained by PeekingIterator.
Note: If the given iterator is already a PeekingIterator, it might be returned to the caller, although this is neither guaranteed to occur nor required to be consistent. For example, this method might choose to pass through recognized implementations of PeekingIterator when the behavior of the implementation is known to meet the contract guaranteed by this method.
There is no Iterable equivalent to this method, so use this method to wrap each individual iterator as it is generated.
iterator - the backing iterator. The
PeekingIterator assumes ownership of this iterator, so users should cease making direct calls to it after calling this method.
PeekingIterator.peek() method, this iterator behaves exactly the same as
iterator.
@Deprecated public static <T> PeekingIterator<T> peekingIterator(PeekingIterator <T> iterator)
@Beta public static <T> UnmodifiableIterator<T> mergeSorted(Iterable <? extends Iterator <? extends T>> iterators, Comparator <? super T> comparator)
iterators, traversing every element of the input iterators. Equivalent entries will not be de-duplicated.
Callers must ensure that the source iterators are in non-descending order as this method does not sort its input.
For any equivalent elements across all iterators, it is undefined which element is returned first.