Est-ce que Java a un équivalent à la méthode range(int, int)
de Python?
Réponses
Trop de publicités? Goyave fournit également quelque chose de similaire au range
de Python:
Range.closed(1, 5).asSet(DiscreteDomains.integers());
Vous pouvez également implémenter un itérateur assez simple pour faire le même genre de chose en utilisant AbstractIterator de Guava:
return new AbstractIterator<Integer>() {
int next = getStart();
@Override protected Integer computeNext() {
if (isBeyondEnd(next)) {
return endOfData();
}
Integer result = next;
next = next + getStep();
return result;
}
};
Je suis en train de travailler sur un peu de Java utils bibliothèque appelée Jools, et il contient une classe Range
qui offre toutes les fonctionnalités dont vous avez besoin (il est téléchargeable en POT).
Les constructeurs sont soit Range(int stop)
, Range(int start, int stop)
ou Range(int start, int stop, int step)
(semblable à une boucle for) et vous pouvez itérer dessus, qui a utilisé l'évaluation différée, ou vous pouvez utiliser ses toList()
méthode explicitement l'ensemble de la liste.
for (int i : new Range(10)) {...} // i = 0,1,2,3,4,5,6,7,8,9
for (int i : new Range(4,10)) {...} // i = 4,5,6,7,8,9
for (int i : new Range(0,10,2)) {...} // i = 0,2,4,6,8
Range range = new Range(0,10,2);
range.toList(); // [0,2,4,6,8]
Depuis Guava 15.0, Range.asSet () est obsolète et doit être supprimé à la version 16. Utilisez plutôt les éléments suivants:
ContiguousSet.create(Range.closed(1, 5), DiscreteDomain.integers());