问题:Java:是否等效于Python的range(int,int)?
Java是否具有等效于Python range(int, int)
方法的方法?
回答 0
Guava还提供类似于Python的东西range
:
Range.closed(1, 5).asSet(DiscreteDomains.integers());
您也可以使用Guava的AbstractIterator实现一个相当简单的迭代器来执行相同的操作:
return new AbstractIterator<Integer>() {
int next = getStart();
@Override protected Integer computeNext() {
if (isBeyondEnd(next)) {
return endOfData();
}
Integer result = next;
next = next + getStep();
return result;
}
};
回答 1
旧问题,新答案(对于Java 8)
IntStream.range(0, 10).forEach(
n -> {
System.out.println(n);
}
);
或带有方法引用:
IntStream.range(0, 10).forEach(System.out::println);
回答 2
从Guava 15.0开始,Range.asSet()已被弃用,并计划在版本16中删除。请改用以下命令:
ContiguousSet.create(Range.closed(1, 5), DiscreteDomain.integers());
回答 3
我正在研究一个名为Jools的 Java utils小库,它包含一个Range
提供所需功能的类(有一个可下载的JAR)。
构造函数可以是Range(int stop)
,Range(int start, int stop)
或Range(int start, int stop, int step)
(类似于for循环),您可以对其进行迭代(使用惰性求值),也可以使用其toList()
方法显式获取范围列表。
for (int i : new Range(10)) {...} // i = 0,1,2,3,4,5,6,7,8,9
for (int i : new Range(4,10)) {...} // i = 4,5,6,7,8,9
for (int i : new Range(0,10,2)) {...} // i = 0,2,4,6,8
Range range = new Range(0,10,2);
range.toList(); // [0,2,4,6,8]
回答 4
public int[] range(int start, int stop)
{
int[] result = new int[stop-start];
for(int i=0;i<stop-start;i++)
result[i] = start+i;
return result;
}
原谅任何语法或样式错误;我通常使用C#编程。
回答 5
您可以使用以下代码段来获取一组整数范围:
Set<Integer> iset = IntStream.rangeClosed(1, 5).boxed().collect
(Collectors.toSet());
回答 6
public int[] range(int start, int length) {
int[] range = new int[length - start + 1];
for (int i = start; i <= length; i++) {
range[i - start] = i;
}
return range;
}
(长回答只是说“不”)
回答 7
Java 9- IntStream::iterate
从Java 9开始,您可以使用IntStream::iterate
,甚至可以自定义步骤。例如,如果要int
数组:
public static int[] getInRange(final int min, final int max, final int step) {
return IntStream.iterate(min, i -> i < max, i -> i + step)
.toArray();
}
或List
:
public static List<Integer> getInRange(final int min, final int max, final int step) {
return IntStream.iterate(min, i -> i < max, i -> i + step)
.boxed()
.collect(Collectors.toList());
}
然后使用它:
int[] range = getInRange(0, 10, 1);
回答 8
Groovy的漂亮的Range类可以从Java中使用,尽管它当然不是Groovy的。
回答 9
“ Functional Java”库允许以这种方式进行有限程度的编程,它具有创建fj.data.Array实例的range()方法。
看到:
同样,“完全懒惰”库提供了一种惰性范围方法:http : //code.google.com/p/totallylazy/
回答 10
如果您打算像在Python循环中那样使用它,则Java会使用for语句很好地循环,这使此结构不必要。
回答 11
IntStream.range(0, 10).boxed().collect(Collectors.toUnmodifiableList());
回答 12
我知道这是一篇老文章,但是如果您正在寻找一种返回对象流并且不希望或不能使用任何其他依赖项的解决方案,请执行以下操作:
Stream.iterate(start, n -> n + 1).limit(stop);
开始 -包容性停止 – 包容性