Populating a List with a contiguous range of integers
JavaGuavaJava 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;
}