package streams;
import java.util.Arrays;
import java.util.stream.*;

public class Beispiele {
	
	
	public static void main(String[] args) {
		Integer[] myArray = new Integer[]{10,20,22,30,50};
		Stream<Integer>  myStream = Arrays.stream(myArray);
		/*
		 * Hier macht der Stream nichts, weil die Intermediate-Operation filter
		 * keine Aktion auslöst, solange keine Terminal-Operation aufgerufen wird.
		*/
		myStream.filter(i -> (i % 2 == 0));//Keine Wirkung, da keine Terminal-Operation folgt
		
		
		/* 
		 * Hier wird eine Intermediate-Operation (filter) auf dem Stream aufgerufen,
		 * die die geraden Zahlen aus dem Stream herausfiltert.
		 * Danach wird die Terminal-Operation count() aufgerufen, die die Anzahl der 
		 * gefilterten Elemente zählt und als long zurückgibt.
		 */
		long x = myStream.filter(i -> (i % 2 == 0)).count(); // count gibt Long zurück
		System.out.println(x);
		
		// Wiederverwendung von myStream liefert einen Compiler-Fehler, da der Stream bereits abgeschlossen ist.
		// Ein Stream kann nur einmal verwendet werden, und nach einer Terminal-Operation wie count() 
		// ist der Stream geschlossen und nicht wiederverwendbar.
		x = myStream.filter(i -> (i % 2 == 1)).count(); // Compiler-Fehler
		System.out.println(x);

		// Compiler-Fehler: Stream has already been operated upon or closed
		// Dieser Fehler tritt auf, weil myStream nach der ersten count()-Operation nicht erneut verwendet werden kann.
		long y = myStream.filter(i -> (i % 2 == 1)).count(); // Compiler-Fehler
		System.out.println(y);

	}
	
	
	
}
