versus - python vs java 2017
Java: ¿Equivalente al rango de Python(int, int)? (10)
¿Java tiene un equivalente al método de range(int, int)
Python?
Desde Guava 15.0, Range.asSet() ha quedado obsoleto y está programado para eliminarse en la versión 16. En su lugar, utilice lo siguiente:
ContiguousSet.create(Range.closed(1, 5), DiscreteDomain.integers());
Estoy trabajando en una pequeña biblioteca Java utils llamada Jools , y contiene un Range
clase que proporciona la funcionalidad que necesita (hay un JAR descargable).
Los constructores son Range(int stop)
, Range(int start, int stop)
o Range(int start, int stop, int step)
(similar a un ciclo for) y puede iterar a través de él, que utilizó evaluación diferida, o puede usar su método toList()
para obtener explícitamente la lista de rango.
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]
La clase Range de Groovy se puede usar desde Java, aunque ciertamente no es tan genial.
La biblioteca "Functional Java" permite programar de forma limitada, tiene un método range () que crea una instancia fj.data.Array.
Ver:
De forma similar, la biblioteca "Totally Lazy" ofrece un método de rango diferido: http://code.google.com/p/totallylazy/
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);
Puede usar el siguiente fragmento de código para obtener un conjunto de enteros de rango:
Set<Integer> iset = IntStream.rangeClosed(1, 5).boxed().collect
(Collectors.toSet());
Si quiere usarlo como lo haría en un bucle de Python, Java realiza un bucle con la instrucción for, lo que hace que esta estructura sea innecesaria para tal fin.
Guava también proporciona algo similar al range
de Python:
Range.closed(1, 5).asSet(DiscreteDomains.integers());
También puede implementar un iterador bastante simple para hacer el mismo tipo de cosas usando 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;
}
};
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")
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;
}
Perdonar cualquier sintaxis o error de estilo; Normalmente programo en C #.