For 循环 - 像 Python 范围函数
我想知道在Java中是否有像python range函数这样的函数。
range(4)
它会回来的
[0,1,2,3]
这是增强循环的简单方法。在Java中执行此操作会很棒,因为它会使循环变得容易得多。这可能吗?
我想知道在Java中是否有像python range函数这样的函数。
range(4)
它会回来的
[0,1,2,3]
这是增强循环的简单方法。在Java中执行此操作会很棒,因为它会使循环变得容易得多。这可能吗?
Java 8(2014)添加了IntStream(类似于apache commons IntRange),所以你现在不需要外部lib。
import java.util.stream.IntStream;
IntStream.range(0, 3).forEachOrdered(n -> {
System.out.println(n);
});
forEach
如果顺序不重要,也可以使用代替。forEachOrdered
IntStream.range(0, 3).parallel()
可用于并行运行的循环
在没有外部库的情况下,您可以执行以下操作。对于大范围,它将比当前接受的答案消耗更少的内存,因为没有创建数组。
有一个这样的类:
class Range implements Iterable<Integer> {
private int limit;
public Range(int limit) {
this.limit = limit;
}
@Override
public Iterator<Integer> iterator() {
final int max = limit;
return new Iterator<Integer>() {
private int current = 0;
@Override
public boolean hasNext() {
return current < max;
}
@Override
public Integer next() {
if (hasNext()) {
return current++;
} else {
throw new NoSuchElementException("Range reached the end");
}
}
@Override
public void remove() {
throw new UnsupportedOperationException("Can't remove values from a Range");
}
};
}
}
你可以简单地像这样使用它:
for (int i : new Range(5)) {
System.out.println(i);
}
您甚至可以重复使用它:
Range range5 = new Range(5);
for (int i : range5) {
System.out.println(i);
}
for (int i : range5) {
System.out.println(i);
}
正如Henry Keiter在下面的评论中指出的那样,我们可以将以下方法添加到类中(或其他任何地方):Range
public static Range range(int max) {
return new Range(max);
}
然后,在其他类中,我们可以
import static package.name.Range.range;
并简单地调用
for (int i : range(5)) {
System.out.println(i);
}