Last active
August 29, 2015 13:58
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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