Est-ce que Java a un équivalent à la méthode range(int, int)
de Python]?
Guava fournit aussi 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;
}
};
Ancienne question, nouvelle réponse (pour Java 8)
IntStream.range(0, 10).forEach(
n -> {
System.out.println(n);
}
);
ou avec des références de méthode:
IntStream.range(0, 10).forEach(System.out::println);
Je travaille sur un peu Java) bibliothèque appelée Jools , et elle contient une classe Range
qui fournit les fonctionnalités dont vous avez besoin (il existe une version téléchargeable 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 le parcourir, qui utilise paresseux. evaluation, ou vous pouvez utiliser sa méthode toList()
pour obtenir explicitement la liste de plages.
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é dans la version 16. Utilisez plutôt les éléments suivants:
ContiguousSet.create(Range.closed(1, 5), DiscreteDomain.integers());
public int[] range(int start, int stop)
{
int[] result = new int[stop-start];
for(int i=0;i<stop-start;i++)
result[i] = start+i;
return result;
}
Pardonnez les erreurs de syntaxe ou de style; Je programme normalement en C #.
Vous pouvez utiliser l'extrait de code suivant pour obtenir un ensemble d'intervalles d'entiers:
Set<Integer> iset = IntStream.rangeClosed(1, 5).boxed().collect
(Collectors.toSet());
public int[] range(int start, int length) {
int[] range = new int[length - start + 1];
for (int i = start; i <= length; i++) {
range[i - start] = i;
}
return range;
}
(Réponse longue juste pour dire "non")
Le nifty de Groovy Range class peut être utilisé à partir de Java, bien que ce ne soit certainement pas aussi groovy.
La bibliothèque "Java fonctionnel" permet de programmer de telle manière qu’elle dispose d’une méthode range () créant une instance fj.data.Array.
Voir:
De même, la bibliothèque "Totally Lazy" propose une méthode de plage paresseuse: http://code.google.com/p/totallylazy/
Si vous voulez l'utiliser comme vous le feriez dans une boucle Python, Java fait une boucle avec l'instruction for, ce qui rend cette structure inutile à cette fin.