package java.util; import java.util.function.Consumer; import java.util.function.DoubleConsumer; import java.util.function.IntConsumer; import java.util.function.LongConsumer; //继承Iterator,通过泛型和消费型函数接口 public interface PrimitiveIterator<T, T_CONS> extends Iterator<T> { //按元素在迭代时发生的顺序为每个剩余元素执行给定的操作,直到所有元素都被处理或操作引发异常为止 @SuppressWarnings("overloads") void forEachRemaining(T_CONS action); //内部静态接口,针对int public static interface OfInt extends PrimitiveIterator<Integer, IntConsumer> { int nextInt();//下一个整型 default void forEachRemaining(IntConsumer action){ Objects.requireNonNull(action); while (hasNext()) action.accept(nextInt()); } @Override default Integer next(){ if(Tripwire.ENABLED) Tripwire.trip(getClass(), "{0} calling PrimitiveIterator.OfInt.nextInt()"); return nextInt(); } @Override default void forEachRemaining(Consumer<? super Integer> action){ if(action instanceof IntConsumer){ forEachRemaining((IntConsumer) action); }else{ // The method reference action::accept is never null Objects.requireNonNull(action); if(Tripwire.ENABLED) Tripwire.trip(getClass(), "{0} calling PrimitiveIterator.OfInt.forEachRemainingInt(action::accept)"); forEachRemaining((IntConsumer) action::accept); } } } //内部静态接口,针对Long public static interface OfLong extends PrimitiveIterator<Long, LongConsumer> { long nextLong(); default void forEachRemaining(LongConsumer action){ Objects.requireNonNull(action); while (hasNext()) action.accept(nextLong()); } @Override default Long next(){ if(Tripwire.ENABLED) Tripwire.trip(getClass(), "{0} calling PrimitiveIterator.OfLong.nextLong()"); return nextLong(); } @Override default void forEachRemaining(Consumer<? super Long> action){ if(action instanceof LongConsumer){ forEachRemaining((LongConsumer) action); }else{ // The method reference action::accept is never null Objects.requireNonNull(action); if(Tripwire.ENABLED) Tripwire.trip(getClass(), "{0} calling PrimitiveIterator.OfLong.forEachRemainingLong(action::accept)"); forEachRemaining((LongConsumer) action::accept); } } } //内部静态接口,针对Double public static interface OfDouble extends PrimitiveIterator<Double, DoubleConsumer> { double nextDouble(); default void forEachRemaining(DoubleConsumer action){ Objects.requireNonNull(action); while (hasNext()) action.accept(nextDouble()); } @Override default Double next(){ if(Tripwire.ENABLED) Tripwire.trip(getClass(), "{0} calling PrimitiveIterator.OfDouble.nextLong()"); return nextDouble(); } @Override default void forEachRemaining(Consumer<? super Double> action){ if(action instanceof DoubleConsumer){ forEachRemaining((DoubleConsumer) action); }else{ // The method reference action::accept is never null Objects.requireNonNull(action); if(Tripwire.ENABLED) Tripwire.trip(getClass(), "{0} calling PrimitiveIterator.OfDouble.forEachRemainingDouble(action::accept)"); forEachRemaining((DoubleConsumer) action::accept); } } } }