32

Java に python range 関数のような関数があるかどうか疑問に思っていました。

range(4)

そしてそれは戻ってきます

[0,1,2,3]

これは、強化されたループを作成する簡単な方法でした。Java でこれを行うと、 for ループがはるかに簡単になるため、すばらしいでしょう。これは可能ですか?

4

9 に答える 9

62

Java 8 (2014) ではIntStream (apache commons IntRange に類似) が追加されたため、外部ライブラリは今は必要ありません。

import java.util.stream.IntStream; 

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

forEachforEachOrdered順序が重要でない場合は、 tooの代わりに使用できます。

IntStream.range(0, 3).parallel()ループを並行して実行するために使用できます

于 2015-08-07T00:48:13.137 に答える
13

ええと... for (int i = 0; i < k; i++)? 強化された for ループを 1 日中記述する必要はありません。

そして、議論のために:

for (int i : range(k)) 文字数: 22

for (int i = 0; i < k; i++)文字数: 27

の実装を割り引くと、range疑似偶数です。

于 2013-05-15T16:15:17.147 に答える
12

Apache Commons Langを使用します。

new IntRange(0, 3).toArray();

私は通常、このような単純なものに外部ライブラリを導入することを推奨しませんが、Apache Commons は非常に広く使用されているため、おそらくプロジェクトに既に含まれているでしょう!

編集: 必ずしも for ループのように単純または高速であるとは限りませんが、意図を明確にするちょっとした構文糖衣です。

編集: @zengr の回答using IntStreamin Java 8 を参照してください。

于 2013-05-15T16:18:06.113 に答える
3

本当に本当に Java で同等の結果を得たい場合は、さらにいくつかの作業を行う必要があります。

public int[] range(int start, int end, int step) {
    int n = (int) Math.ceil((end-start)/(double)step);
    int[] arange = new int[n];
    for (int i = 0; i < n; i++)
        arange[i] = i*step+start;
    return arange;
}

range(0, 4, 1)Python: のように、期待値を返すようになりました[0, 1, 2, 3]。悲しいことに、Java にはこれより簡単な方法はありません。Java はPython のように表現力に優れた言語ではありません。

于 2013-05-15T16:17:02.967 に答える
1

それは本当です。しかし、静的メソッドを作成して使用します-

public static int[] range(int index){
    int[] arr = new int[index];
    for(int i=0;i<index;i++){
        arr[i]=i;
    }
    return arr;
}
于 2013-05-15T16:18:02.283 に答える
0

rangeこの関数に相当する Java はありませんが、拡張された for-loopがあります。

for (String s : strings) {
    // Do stuff
}

range構文に本当に執着している場合は、独自の関数をロールすることもできますが、少しばかげているようです。

public static int[] range(int length) {
    int[] r = new int[length];
    for (int i = 0; i < length; i++) {
        r[i] = i;
    }
    return r;
}

// ...

String s;
for (int i : range(arrayOfStrings.length)) {
    s = arrayOfStrings[i];
    // Do stuff
}
于 2013-05-15T16:15:40.033 に答える
0

私の知る限り、Java には同等の関数はありません。しかし、あなたはそれを自分で書くことができます:

public static int[] range(int n) {
    int[] ans = new int[n];
    int i;
    for(i = 0; i < n; i++) {
        ans[i] = i;
    }
    return ans;
}
于 2013-05-15T16:19:16.290 に答える