Java:相当于Python的范围(int,int)?
Java是否具有Python的range(int, int)
方法的等价物?
番石榴还提供类似于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; } };
老问题,新答案(对于Java 8)
IntStream.range(0, 10).forEach( n -> { System.out.println(n); } );
或方法参考:
IntStream.range(0, 10).forEach(System.out::println);
自Guava 15.0以来, Range.asSet()已被弃用,并计划在版本16中删除。请改为使用以下内容:
ContiguousSet.create(Range.closed(1, 5), DiscreteDomain.integers());
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#编程。
我正在研究一个名为Jools的小Java工具库,它包含一个Range
类,它提供了您需要的function(有一个可下载的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]
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; }
(长答案只是说“不”)
您可以使用下面的代码片段来获取一组范围的整数:
Set<Integer> iset = IntStream.rangeClosed(1, 5).boxed().collect (Collectors.toSet());
Groovy的漂亮的Range类可以从Java中使用,尽pipe它当然不是常规的。
“Functional Java”库允许以有限的程度进行编程,它有一个创buildfj.data.Array实例的range()方法。
看到:
同样的“完全懒”库提供了一个懒惰的范围方法: http : //code.google.com/p/totallylazy/
如果你的意思是像在Python循环中那样使用它,那么Java会很好地与for语句循环,这就使得这个结构不需要这个结构。