/** Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
**/
packagejava.util;importjava.util.function.Consumer;/*** An iterator over a collection. {@codeIterator} takes the place of
* {@linkEnumeration} in the Java Collections Framework. Iterators
* differ from enumerations in two ways:
*
*
*
Iterators allow the caller to remove elements from the* underlying collection during the iteration with well-defined
* semantics.
*
Method names have been improved.*
*
*
This interface is a member of the
* Java Collections Framework.
*
*@param the type of elements returned by this iterator
*
*@authorJosh Bloch
*@seeCollection
*@seeListIterator
*@seeIterable
*@since1.2*/
public interface Iterator{/*** Returns {@codetrue} if the iteration has more elements.
* (In other words, returns {@codetrue} if {@link#next} would
* return an element rather than throwing an exception.)
*
*@return{@codetrue} if the iteration has more elements*/
booleanhasNext();/*** Returns the next element in the iteration.
*
*@returnthe next element in the iteration
*@throwsNoSuchElementException if the iteration has no more elements*/E next();/*** Removes from the underlying collection the last element returned
* by this iterator (optional operation). This method can be called
* only once per call to {@link#next}. The behavior of an iterator
* is unspecified if the underlying collection is modified while the
* iteration is in progress in any way other than by calling this
* method.
*
* @implSpec
* The default implementation throws an instance of
* {@linkUnsupportedOperationException} and performs no other action.
*
*@throwsUnsupportedOperationException if the {@coderemove}
* operation is not supported by this iterator
*
*@throwsIllegalStateException if the {@codenext} method has not
* yet been called, or the {@coderemove} method has already
* been called after the last call to the {@codenext}
* method*/
default voidremove() {throw new UnsupportedOperationException("remove");
}/*** Performs the given action for each remaining element until all elements
* have been processed or the action throws an exception. Actions are
* performed in the order of iteration, if that order is specified.
* Exceptions thrown by the action are relayed to the caller.
*
* @implSpec
*
The default implementation behaves as if:
*
{@code* while (hasNext())
* action.accept(next());
* }
*
*@paramaction The action to be performed for each element
*@throwsNullPointerException if the specified action is null
*@since1.8*/
default void forEachRemaining(Consumer super E>action) {
Objects.requireNonNull(action);while(hasNext())
action.accept(next());
}
}