web-dev-qa-db-fra.com

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

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

91
Nick Heiner

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;
  }
};
24
Simon Steele

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);
205
jhodges

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]
15
Amir Rachum

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());
15
jiehanzheng
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 #.

14
KeithS

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());
8
Julian
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")

5
Vivien Barousse

Le nifty de Groovy Range class peut être utilisé à partir de Java, bien que ce ne soit certainement pas aussi groovy.

2
John

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/

2
tkruse

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.

1
Nikki9696