package ar.com.javacuriosities.streams;
import java.util.stream.Stream;
/*
* A partir de Java 1.8 podemos utilizar la nueva API de Streams.
* Cuando hablamos de Streams nos referimos a una secuencia de elementos, donde los elementos van fluyendo
* y se van.
* Algunas de sus características son:
* - Sólo pueden recorrerse una sola vez.
* - Pueden ser infinitos.
* - Pueden ser secuenciales o paralelos
* - Están compuestos de operaciones intermedias que retornan streams y operaciones finales que desencadenan todo el flujo
*
* Podemos asociar los Streams con Pipeline, donde debe existir una fuente de datos,
* luego 0 o mas operaciones intermedias, las cuales retornan flujos que sirven como entrada de las
* siguientes operaciones, y al final aplicamos una operación final la cual produce un resultado o
* un side-effect (Puede ser algo tan simple como imprimir los valores)
*/
public class Lesson01Introduction {
public static void main(String[] args) {
// Creamos un Stream el cual recorre sus valores y los imprime
Stream<String> names = Stream.of("Cosme Fulanito", "Pablo Marmol", "Pedro Picapiedra");
names.forEach(System.out::println);
// Creamos un Stream donde aplicamos operaciones intermedias y luego una operación final
Stream<String> words = Stream.of("hello", "world", "streams");
// Operación intermedia
words = words.map(word -> word.substring(0, 1).toUpperCase() + word.substring(1));
// Operación final
words.forEach(System.out::println);
}
}