JavaにはPythonのrange(int, int)メソッドと同等のものはありますか?
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;
}
};
Range#asSet廃止されたようです。これを行う必要があります:ContiguousSet.create(Range.closed(low, high), DiscreteDomain.integers())
古い質問、新しい答え(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());
私は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]
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#でプログラミングします。
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;
}
(「いいえ」と言うだけの長い回答)
IntStream::iterateJava 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);
「Functional Java」ライブラリーは、そのような方法で限られた程度にプログラムすることを可能にし、fj.data.Arrayインスタンスを作成するrange()メソッドを備えています。
見る:
同様に、「Totally Lazy」ライブラリは遅延範囲メソッドを提供します:http : //code.google.com/p/totallylazy/
Pythonループと同じように使用する場合、Javaはforステートメントを使用してうまくループします。これにより、この構造はその目的には不要になります。