在 Java 中获取整数范围的迭代器的最简方法
在Java中,获得一系列整数的迭代器的最短方法是什么?换句话说,实现以下内容:
/**
* Returns an Iterator over the integers from first to first+count.
*/
Iterator<Integer> iterator(Integer first, Integer count);
类似的东西
(first..first+count).iterator()
在Java中,获得一系列整数的迭代器的最短方法是什么?换句话说,实现以下内容:
/**
* Returns an Iterator over the integers from first to first+count.
*/
Iterator<Integer> iterator(Integer first, Integer count);
类似的东西
(first..first+count).iterator()
此实现没有内存占用。
/**
* @param begin inclusive
* @param end exclusive
* @return list of integers from begin to end
*/
public static List<Integer> range(final int begin, final int end) {
return new AbstractList<Integer>() {
@Override
public Integer get(int index) {
return begin + index;
}
@Override
public int size() {
return end - begin;
}
};
}
在Java 8及更高版本中,您可以简单地说:
IntStream.range(begin, end).iterator() // returns PrimitiveIterator.OfInt
或者如果您需要盒装版本:
IntStream.range(begin, end).boxed().iterator() // returns Iterator<Integer>
未经测试。将其映射到“最小,计数”作为读者的练习。
public class IntRangeIterator implements Iterator<Integer> {
private int nextValue;
private final int max;
public IntRangeIterator(int min, int max) {
if (min > max) {
throw new IllegalArgumentException("min must be <= max");
}
this.nextValue = min;
this.max = max;
}
public boolean hasNext() {
return nextValue <= max;
}
public Integer next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
return Integer.valueOf(nextValue++);
}
public void remove() {
throw new UnsupportedOperationException();
}
}