* Implementing thisinterfaceallowsanobjecttobethetargetoftheenhanced * {@codefor} statement (sometimes called the "for-each loop" statement). * * @param <T> the type of elements returned by the iterator * * @since1.5 * @jls14.14.2 The enhanced {@codefor} statement
实现此接口允许一个对象成为增强for语句的目标,就是下面这样。
1 2 3 4 5 6 7 8 9
a.forEach( new Consumer<Object>() {
@Override publicvoidaccept(Object o){
} } );
构造函数
1 2 3 4 5 6
/** * Returns an iterator over elements of type {@code T}. * * @return an Iterator. */ Iterator<T> iterator();
/** * Performs the given action for each element of the {@code Iterable} * 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. * <p> * The behavior of this method is unspecified if the action performs * side-effects that modify the underlying source of elements, unless an * overriding class has specified a concurrent modification policy. * * @implSpec * <p>The default implementation behaves as if: * <pre>{@code * for (T t : this) * action.accept(t); * }</pre> * * @param action The action to be performed for each element * @throws NullPointerException if the specified action is null * @since 1.8 */ defaultvoidforEach(Consumer<? super T> action){ Objects.requireNonNull(action); for (T t : this) { action.accept(t); } }
/** * Creates a {@link Spliterator} over the elements described by this * {@code Iterable}. * * @implSpec * The default implementation creates an * <em><a href="../util/Spliterator.html#binding">early-binding</a></em> * spliterator from the iterable's {@code Iterator}. The spliterator * inherits the <em>fail-fast</em> properties of the iterable's iterator. * * @implNote * The default implementation should usually be overridden. The * spliterator returned by the default implementation has poor splitting * capabilities, is unsized, and does not report any spliterator * characteristics. Implementing classes can nearly always provide a * better implementation. * * @return a {@code Spliterator} over the elements described by this * {@code Iterable}. * @since 1.8 */ default Spliterator<T> spliterator(){ return Spliterators.spliteratorUnknownSize(iterator(), 0); }