Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Populating a List with a contiguous range of integers

Tags:

java

guava

The new, Java 8 way:

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

Using Guava, you can resort to a Range: https://guava.dev/releases/19.0/api/docs/com/google/common/collect/Range.html

Of course, there will still be loops in your code, but they just might be hidden from the code for simplicity sake.

For instance:

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

Check https://github.com/google/guava/wiki/RangesExplained for some more examples.

Keep in mind that if you do need to eventually iterate over the Range, you cannot do so directly, only through using DiscreteDomains.integers().


Btw. if it is only to be used in some sort of iteration, you could simply create a basic class which implements the Iterable interface, to skip the insertion altogether.

Something like this:

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++;
        }
    }
}

Which could be used in some way like this:

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

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