Подтвердить что ты не робот

Заполнение списка с непрерывным диапазоном целых чисел

Я хотел бы иметь список, который содержит целые числа в диапазоне от 1 до 500. Есть ли способ создать этот список, используя Гуава (или просто Java) без необходимости циклически перебирать диапазон и добавлять значения по отдельности в моем собственном код?

4b9b3361

Ответ 1

Используя 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 на несколько примеров.

Имейте в виду, что если вам нужно в конечном итоге перебрать Range, вы не сможете сделать это напрямую, только используя DiscreteDomains.integers().

Ответ 2

Новый, Java 8, способ:

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

Ответ 3

Btw. если он используется только в какой-то итерации, вы можете просто создать базовый класс, который реализует интерфейс 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
}

Ответ 4

Вы также можете использовать утилиту 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;
}