Skip to content

Instantly share code, notes, and snippets.

@sahands
Last active August 29, 2015 13:58
Show Gist options
  • Save sahands/9982370 to your computer and use it in GitHub Desktop.
Save sahands/9982370 to your computer and use it in GitHub Desktop.
Simple example of an iterable in Java that behaves similar to Python 3's "range" iterator.
import java.util.NoSuchElementException;
import java.util.Iterator;
public class Range implements Iterable<Integer> {
private int start, end;
public Range(int start, int end) {
this.start = start;
this.end = end;
}
@Override
public Iterator<Integer> iterator() {
return new RangeIterator();
}
// Inner class example
private class RangeIterator implements
Iterator<Integer> {
private int cursor;
public RangeIterator() {
this.cursor = Range.this.start;
}
@Override
public boolean hasNext() {
return this.cursor < Range.this.end;
}
@Override
public Integer next() {
if(this.hasNext()) {
int current = cursor;
cursor ++;
return current;
}
throw new NoSuchElementException();
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
}
public static void main(String[] args) {
Range range = new Range(1, 10);
// Long way
Iterator<Integer> it = range.iterator();
while(it.hasNext()) {
int cur = it.next();
System.out.println(cur);
}
// Shorter, nicer way:
// Read ":" as "in"
for(Integer cur : range) {
System.out.println(cur);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment