118 votes

Java: équivalent de la gamme de Python (int, int)?

Est-ce que Java a un équivalent à la méthode range(int, int) de Python?

248voto

jhodges Points 203

Ancienne question, nouvelle réponse (pour java8)

     IntStream.range(0, 10).forEach(
        n -> {
            System.out.println(n);
        }
    );
 

30voto

Simon Steele Points 8344

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

17voto

Amir Rachum Points 13236

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]

16voto

jiehanzheng Points 392

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

15voto

KeithS Points 36130
 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 #.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X