Commit 2f9a320f by Patryk Czarnik

DzialanieStreamow

parent b23b9635
package p14_streamy;
import java.util.List;
import java.util.stream.Stream;
public class DzialanieStreamow1 {
public static void main(String[] args) {
// Przykładowe dane - imiona
// List.of jest od Java 9 najprostszym sposobem utworzenia listy o określonej zawartości,
// ale będzie to lista TYLKO DO ODCZYTU
List<String> lista = List.of("Ala", "Małogosia", "Żaneta", "Ola", "Dagmara", "Sylwia");
// Samo wywołanie "stream()" nie odczytuje jeszcze danych:
Stream<String> stream1 = lista.stream();
System.out.println(stream1);
// stream uzyskuje jakikolwiek sens, jeśli dołączymy do niego kolejne operacje
// Teraz zbudujemy wieloelementowy "pipeline", ale jeszcze bez operacji końcowej (nie ma forEach!).
// W celu obserwacji, co się dzieje, dodatkowo będziemy wypisywać na ekran obiekty,
// które przechodzą przez stream, za pomocą dodatkowe operacji peek.
Stream<String> stream2 = stream1
.peek(imie -> System.out.println("A: " + imie))
.filter(imie -> imie.length() > 3)
.peek(imie -> System.out.println("B: " + imie))
.map(String::toUpperCase)
.peek(imie -> System.out.println("C: " + imie));
System.out.println("Pipeline przygotowany: " + stream2);
// UWAGA! Operacje opisane w strumieniu jeszcze się nie wykonały.
// Mamy ułożony rurociąg, ale ropa jescze nie płynie.
// Dopiero, gdy na końcu pipeline dołożymy operację końcową ("terminal operation"),
// spowoduje to pobieranie danych ze źródła i przejście przez kolejne etapy przetwarzania:
stream2.forEach(imie -> System.out.println(" * " + imie));
}
}
package p14_streamy;
import java.util.List;
import java.util.stream.Stream;
public class DzialanieStreamow2_Parallel {
public static void main(String[] args) {
// Przykładowe dane - imiona
// List.of jest od Java 9 najprostszym sposobem utworzenia listy o określonej zawartości,
// ale będzie to lista TYLKO DO ODCZYTU
List<String> lista = List.of("Ala", "Małogosia", "Żaneta", "Ola", "Dagmara", "Sylwia");
// Samo wywołanie "stream()" nie odczytuje jeszcze danych:
Stream<String> stream1 = lista.parallelStream();
System.out.println(stream1);
// stream uzyskuje jakikolwiek sens, jeśli dołączymy do niego kolejne operacje
// Teraz zbudujemy wieloelementowy "pipeline", ale jeszcze bez operacji końcowej (nie ma forEach!).
// W celu obserwacji, co się dzieje, dodatkowo będziemy wypisywać na ekran obiekty,
// które przechodzą przez stream, za pomocą dodatkowe operacji peek.
Stream<String> stream2 = stream1
.peek(imie -> System.out.println("A: " + imie))
.filter(imie -> imie.length() > 3)
.peek(imie -> System.out.println("B: " + imie))
.map(String::toUpperCase)
.peek(imie -> System.out.println("C: " + imie));
System.out.println("Pipeline przygotowany: " + stream2);
// UWAGA! Operacje opisane w strumieniu jeszcze się nie wykonały.
// Mamy ułożony rurociąg, ale ropa jescze nie płynie.
// Dopiero, gdy na końcu pipeline dołożymy operację końcową ("terminal operation"),
// spowoduje to pobieranie danych ze źródła i przejście przez kolejne etapy przetwarzania:
// Gdy stosujemy parallelStream, to forEach może (i w praktyce to robi)
// przetwrzać elementy w zmienionej kolejności.
// stream2.forEach(imie -> System.out.println(" * " + imie));
// Jeśli chcemy tego uniknąć, to powinniśmy uzyć forEachOrdered.
stream2.forEachOrdered(imie -> System.out.println(" * " + imie));
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment