JavaにはPythonのrange(int, int)
メソッドと同等のものがありますか?
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;
}
};
古い質問、新しい答え(Java 8)の場合)
IntStream.range(0, 10).forEach(
n -> {
System.out.println(n);
}
);
またはメソッド参照あり:
IntStream.range(0, 10).forEach(System.out::println);
私は少しJava utilsライブラリ Jools と呼ばれ、それに必要な機能を提供する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]
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#でプログラムします。
整数の範囲セットを取得するには、次のコードスニペットを使用できます。
Set<Integer> iset = IntStream.rangeClosed(1, 5).boxed().collect
(Collectors.toSet());
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;
}
(「いいえ」と言うだけの長い答え)
Groovyの気の利いた Rangeクラス はJavaから使用できますが、Groovyほどではありません。
「Functional Java」ライブラリーでは、限られた程度までしかプログラミングできません。fj.data.Arrayインスタンスを作成するrange()メソッドがあります。
見る:
同様に、「Totally Lazy」ライブラリは、遅延範囲メソッドを提供します: http://code.google.com/p/totallylazy/
Pythonループ、Java forステートメントでうまくループするのと同じように使用する場合、この構造はそのために不要になります。