J'aimerais avoir une liste qui contient les entiers compris entre 1 et 500. Y a-t-il un moyen de créer cette liste en utilisant Guava (ou tout simplement Java) sans avoir à parcourir la plage et ajouter les valeurs individuellement dans la mienne code?
En utilisant Guava, vous pouvez recourir à un Range
: http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Range.html =
Bien sûr, il y aura toujours des boucles dans votre code, mais elles pourraient simplement être cachées du code pour des raisons de simplicité.
Par exemple:
Range<Integer> yourValues = Range.closed(1, 500);
Vérifiez http://code.google.com/p/guava-libraries/wiki/RangesExplained pour d'autres exemples.
Gardez à l'esprit que si vous avez besoin d'itérer éventuellement sur le Range
, vous ne pouvez pas le faire directement, uniquement en utilisant la fonction DiscreteDomains.integers()
.
Le nouveau, Java 8, façon:
List<Integer> range = IntStream.range(0, 500).boxed().collect(Collectors.toList());
Btw. si elle ne doit être utilisée que dans une sorte d'itération, vous pouvez simplement créer une classe de base qui implémente l'interface Iterable
, pour ignorer complètement l'insertion.
Quelque chose comme ça:
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++;
}
}
}
Qui pourrait être utilisé d'une manière comme celle-ci:
Iterable<Integer> range = new IntegerRange(1, 500);
for (int i : range) {
// ... do something with the integer
}
Vous pouvez également utiliser l'utilitaire Apache Commons IntRange
Par exemple.
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;
}