Populating a List with a contiguous range of integers

JavaGuava

Java Problem Overview


I'd like to have a list which contains the integers in the range 1 to 500. Is there some way to create this list using Guava (or just plain Java) without having to loop through the range and add the values individually within my own code?

Java Solutions


Solution 1 - Java

The new, Java 8 way:

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

Solution 2 - Java

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().

Solution 3 - Java

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
}

Solution 4 - Java

You can also use Apache Commons IntRange utility

E.g.

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser1596371View Question on Stackoverflow
Solution 1 - JavaNorswapView Answer on Stackoverflow
Solution 2 - JavapcalcaoView Answer on Stackoverflow
Solution 3 - JavaFeirellView Answer on Stackoverflow
Solution 4 - Javanilesh virkarView Answer on Stackoverflow