package ar.com.javacuriosities.streams;
import java.util.Random;
import java.util.stream.IntStream;
/*
* Los Streams pueden ser finitos o infinito, generalmente pensamos esto como:
*
* while(true) {
*
* if (specialCondition()) {
* break;
* }
* // Loop indefinitely
* }
*
* Dado que cuando usamos Streams no hay un ciclo de forma explícita no podemos aplicar algo similar
* a lo anterior pero podemos terminar un Stream cuando se cumple una condición
*
* - findFirst (Este método sirve con sequential y parallel stream, siempre ofreciendo el mismo resultado para el mismo input)
* - findAny (Es útil para parallel stream ya que no siempre obtendremos el mismo resultado)
*/
public class Lesson09InfiniteStreams {
public static void main(String[] args) {
/*
* Este Stream es infinito, podemos usar el método filter que retorna un LazyStream y luego findFirst o findAny
*/
IntStream randonNumbers = new Random().ints();
int number = randonNumbers.filter(i -> i > 0 && i < 256).findFirst().getAsInt();
System.out.println("The random number is: " + number);
}
}