¿Java tiene un equivalente al range(int, int)método de Python ?
¿Java tiene un equivalente al range(int, int)método de Python ?
Respuestas:
Guava también proporciona algo similar a Python range:
Range.closed(1, 5).asSet(DiscreteDomains.integers());
También puede implementar un iterador bastante simple para hacer el mismo tipo de cosas usando el 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;
}
};
Range#asSetParece que ha quedado obsoleto. Ahora necesita hacer esto:ContiguousSet.create(Range.closed(low, high), DiscreteDomain.integers())
Pregunta anterior, nueva respuesta (para Java 8)
IntStream.range(0, 10).forEach(
n -> {
System.out.println(n);
}
);
o con referencias de métodos:
IntStream.range(0, 10).forEach(System.out::println);
Desde Guava 15.0, Range.asSet () ha quedado obsoleto y está programado para ser eliminado en la versión 16. Utilice lo siguiente en su lugar:
ContiguousSet.create(Range.closed(1, 5), DiscreteDomain.integers());
Estoy trabajando en una pequeña biblioteca de utilidades de Java llamada Jools , y contiene una clase Rangeque proporciona la funcionalidad que necesita (hay un JAR descargable).
Los constructores son o bien Range(int stop), Range(int start, int stop)o Range(int start, int stop, int step)(similar a un bucle for) y usted puede iterar a través de él, el cual utiliza la evaluación perezosa, o puede utilizar su toList()método para obtener explícitamente la lista de rangos.
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]
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;
}
Perdone cualquier error de sintaxis o estilo; Normalmente programo en C #.
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;
}
(Respuesta larga solo para decir "No")
IntStream::iterateDesde Java 9 puedes usar IntStream::iteratee incluso puedes personalizar el paso. Por ejemplo, si quieres una intmatriz:
public static int[] getInRange(final int min, final int max, final int step) {
return IntStream.iterate(min, i -> i < max, i -> i + step)
.toArray();
}
o bien List:
public static List<Integer> getInRange(final int min, final int max, final int step) {
return IntStream.iterate(min, i -> i < max, i -> i + step)
.boxed()
.collect(Collectors.toList());
}
Y luego úsalo:
int[] range = getInRange(0, 10, 1);
La ingeniosa clase Range de Groovy se puede usar desde Java, aunque ciertamente no es tan maravillosa.
La biblioteca "Functional Java" permite programar de tal manera hasta un grado limitado, tiene un método range () creando una instancia fj.data.Array.
Ver:
De manera similar, la biblioteca "Totally Lazy" ofrece un método de rango perezoso: http://code.google.com/p/totallylazy/
Si tiene la intención de usarlo como lo haría en un bucle de Python, Java funciona bien con la instrucción for, lo que hace que esta estructura sea innecesaria para ese propósito.
IntStream.range(0, 10).boxed().collect(Collectors.toUnmodifiableList());