
com.annimon.stream.iterator.PrimitiveExtIterator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of stream Show documentation
Show all versions of stream Show documentation
Enhancing Java 8 Streams
The newest version!
package com.annimon.stream.iterator;
import java.util.NoSuchElementException;
/**
* Extended PrimitiveIterator for common purposes.
*/
public final class PrimitiveExtIterator {
private PrimitiveExtIterator() { }
public static abstract class OfInt extends PrimitiveIterator.OfInt {
protected int next;
protected boolean hasNext, isInit;
@Override
public boolean hasNext() {
if (!isInit) {
// First call to hasNext() on new iterator
nextIteration();
isInit = true;
}
return hasNext;
}
@Override
public int nextInt() {
if (!isInit) {
// First call to next() or nextInt() on new iterator
hasNext();
}
if (!hasNext) {
throw new NoSuchElementException();
}
final int result = next;
nextIteration();
return result;
}
protected abstract void nextIteration();
}
public static abstract class OfLong extends PrimitiveIterator.OfLong {
protected long next;
protected boolean hasNext, isInit;
@Override
public boolean hasNext() {
if (!isInit) {
// First call to hasNext() on new iterator
nextIteration();
isInit = true;
}
return hasNext;
}
@Override
public long nextLong() {
if (!isInit) {
// First call to next() or nextLong() on new iterator
hasNext();
}
if (!hasNext) {
throw new NoSuchElementException();
}
final long result = next;
nextIteration();
return result;
}
protected abstract void nextIteration();
}
public static abstract class OfDouble extends PrimitiveIterator.OfDouble {
protected double next;
protected boolean hasNext, isInit;
@Override
public boolean hasNext() {
if (!isInit) {
// First call to hasNext() on new iterator
nextIteration();
isInit = true;
}
return hasNext;
}
@Override
public double nextDouble() {
if (!isInit) {
// First call to next() or nextDouble() on new iterator
hasNext();
}
if (!hasNext) {
throw new NoSuchElementException();
}
final double result = next;
nextIteration();
return result;
}
protected abstract void nextIteration();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy