Edited: As Java 8, this is possible with java.util.stream.IntStream.range(int startInclusive, int endExclusive)
Before Java8:
There is not such thing in Java but you can have something like this:
import java.util.Iterator;
public class Range implements Iterable<Integer> {
private int min;
private int count;
public Range(int min, int count) {
this.min = min;
this.count = count;
}
public Iterator<Integer> iterator() {
return new Iterator<Integer>() {
private int cur = min;
private int count = Range.this.count;
public boolean hasNext() {
return count != 0;
}
public Integer next() {
count--;
return cur++; // first return the cur, then increase it.
}
public void remove() {
throw new UnsupportedOperationException();
}
};
}
}
For example you can use Range by this way:
public class TestRange {
public static void main(String[] args) {
for (int i : new Range(1, 10)) {
System.out.println(i);
}
}
}
Also if you don't like use new Range(1, 10)
directly, you can use factory class for it:
public final class RangeFactory {
public static Iterable<Integer> range(int a, int b) {
return new Range(a, b);
}
}
And here is our factory test:
public class TestRangeFactory {
public static void main(String[] args) {
for (int i : RangeFactory.range(1, 10)) {
System.out.println(i);
}
}
}
I hope these will be useful :)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…