Por ejemplo, Instream.range(0,10) - está iterando desde el índice 0 hasta el 10.
Instream.range(10,0) - pero de 10 a 0 no funciona, ¿cómo hacerlo usando Stream API?
Puede usar IntStream.iterate (initialValue, hasNext, next):
IntStream.iterate(10, i -> i >= 0, i -> i - 1)Si estás atascado con Java 8:
IntStream.iterate(10, i -> i - 1).limit(11)No puede generar una secuencia descendente usando range(). Java doc especifica claramente que los pasos son un incremento de 1. Si hubiera una opción para proporcionar un paso, entonces podríamos tenerla. Sin embargo, hay diferentes maneras en las que puedes lograr lo mismo.
IntStream.iterate(10, i -> i >= 1, i -> --i) IntStream.rangeClosed(1, 10).boxed().sorted(Comparator.reverseOrder()) IntStream.range(-10, 0).map(i -> -i)De estos tres métodos de iteración y uso sería el mejor enfoque.
Otra solución de compensación es modificar el valor del rango como:
int exclusiveEnd = 10; IntStream.range(0, exclusiveEnd).forEach((i) -> { System.out.println(exclusiveEnd - 1 - i); });Use el map después del range para calcular el nuevo valor:
IntStream.range(0, 10).map(i -> 10 - i); // 10, 9, .. 1 IntStream.rangeClosed(0, 10).map(i -> 10 - i); // 10, 9, .. 0Si desea que se repita el mismo conjunto de números si se transponen inicio/final, esto reemplazará los rangos si start > end :
IntStream range(int start, int end) { return start < end ? IntStream.range(start,end) : IntStream.range(-start+1, -end+1).map(i -> -i); } range(2,5).forEach(System.out::println); 2 3 4 range(5,2).forEach(System.out::println) 4 3 2Si desea que se conserve el significado de (startInclusive, endExclusive), modifíquelo como:
IntStream range2(int start, int end) { return start < end ? IntStream.range(start,end) : IntStream.range(-start, -end).map(i -> -i); } range2(5,2).forEach(System.out::println) 5 4 3