web-dev-qa-db-ja.com

Java:Pythonのrange(int、int)と同等ですか?

JavaにはPythonのrange(int, int)メソッドと同等のものがありますか?

91
Nick Heiner

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;
  }
};
24
Simon Steele

古い質問、新しい答え(Java 8)の場合)

    IntStream.range(0, 10).forEach(
        n -> {
            System.out.println(n);
        }
    );

またはメソッド参照あり:

IntStream.range(0, 10).forEach(System.out::println);
205
jhodges

私は少し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]
15
Amir Rachum

Guava 15.0以降、 Range.asSet() は非推奨になり、バージョン16で削除される予定です。代わりに以下を使用してください。

ContiguousSet.create(Range.closed(1, 5), DiscreteDomain.integers());
15
jiehanzheng
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#でプログラムします。

14
KeithS

整数の範囲セットを取得するには、次のコードスニペットを使用できます。

    Set<Integer> iset = IntStream.rangeClosed(1, 5).boxed().collect
            (Collectors.toSet());
8
Julian
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;
}

(「いいえ」と言うだけの長い答え)

5
Vivien Barousse

Groovyの気の利いた Rangeクラス はJavaから使用できますが、Groovyほどではありません。

2
John

「Functional Java」ライブラリーでは、限られた程度までしかプログラミングできません。fj.data.Arrayインスタンスを作成するrange()メソッドがあります。

見る:

同様に、「Totally Lazy」ライブラリは、遅延範囲メソッドを提供します: http://code.google.com/p/totallylazy/

2
tkruse

Pythonループ、Java forステートメントでうまくループするのと同じように使用する場合、この構造はそのために不要になります。

1
Nikki9696