web-dev-qa-db-ja.com

連続した整数範囲でリストを作成する

1から500の範囲の整数を含むリストが欲しいコード?

36
jgm

Guavaを使用すると、Rangeに頼ることができます。 http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Range.html =

もちろん、コードにはまだループがありますが、簡単にするためにコードからループが隠されている場合があります。

例えば:

_Range<Integer> yourValues = Range.closed(1, 500);
_

その他の例については、 http://code.google.com/p/guava-libraries/wiki/RangesExplained を確認してください。

doが最終的にRangeを反復処理する必要がある場合は、DiscreteDomains.integers()

14
pcalcao

新しい、Java 8、方法:

List<Integer> range = IntStream.range(0, 500).boxed().collect(Collectors.toList());
94
Norswap

ところである種の反復でのみ使用する場合は、Iterableインターフェイスを実装する基本クラスを作成して、挿入を完全にスキップできます。

このようなもの:

import Java.util.Iterator;

public class IntegerRange implements Iterable<Integer> {
    private int start, end;

    public IntegerRange(int start, int end) {
        if (start <= end) {
            this.start = start;
            this.end = end;
        } else {
            this.start = end;
            this.end = start;
        }
    }

    @Override
    public Iterator<Integer> iterator() {
        return new IntegerRangeIterator();
    }

    private class IntegerRangeIterator implements Iterator<Integer> {
        private int current = start;

        @Override
        public boolean hasNext() {
            return current <= end;
        }

        @Override
        public Integer next() {
            return current++;
        }
    }
}

これは次のような方法で使用できます。

Iterable<Integer> range = new IntegerRange(1, 500);

for (int i : range) {
    // ... do something with the integer
}
1
Feirell

Apache Commons IntRange ユーティリティも使用できます

例えば。

    private List<Integer> getAllIntegerRange(Integer firstValue, Integer secondValue) {
    List<Integer> values = new ArrayList<>();
    IntRange rang = new IntRange(firstValue, secondValue);
    int[] ranges = rang.toArray();
    for (int i : ranges) {
        values.add(i);
    }
    return values;
}
0
nilesh virkar