Transformacja danych za pomocą strumieni

Wejście/wyjście i strumienie w Javie

Alex Liu

Software Development Engineer

Transformacja danych za pomocą strumieni

  • Transformacja danych za pomocą strumieni

    • Konwersja formatów, agregacja i filtrowanie danych
    • Wyniki przechowywane w nowym typie kolekcji (np. z List do Set)
    • Obsługiwane kolekcje:
      • Listy (np. ArrayList, LinkedList)
      • Zbiory (np. HashSet, TreeSet)
      • Mapy (Keys/Values jako Streams) (np. HashMap, TreeMap)
      • Tablice (przez Arrays.stream())
  • Przykładowa ArrayList o nazwie names używana w dalszej części

    names: ["Alice", "Bob", "Charlie", "David"]
    
Wejście/wyjście i strumienie w Javie

Transformacja elementów za pomocą Stream

  • Przygotowanie: import klas Set, Collectors i Stream
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

// Convert the `ArrayList` we created earlier `names` to a `Stream` Stream<String> namesStream = names.stream();
  • Bieżące dane: [Alice, Bob, Charlie, David]
Wejście/wyjście i strumienie w Javie

Transformacja elementów za pomocą Stream (cd.)

// Use `.map()` to convert each element to upper case
Stream<String> upperCaseNameStream = namesStream.map(
        name -> name.toUpperCase())
  • Bieżące dane: [ALICE, BOB, CHARLIE, DAVID]
// use `.collect()` and `Collectors.toSet()` to store the transformed stream data
upperCaseNameStream.collect(Collectors.toSet())
  • Wynik końcowy:
    {CHARLIE, ALICE, BOB, DAVID}
    
Wejście/wyjście i strumienie w Javie

Agregacja za pomocą Stream

  • Metoda .reduce()

    • Agreguje elementy do jednego wyniku
    • Przydatna do sumowania, łączenia lub znajdowania min/max
  • Metoda .reduce() przyjmuje dwa argumenty

    • Wartość początkowa: punkt startowy akumulacji, np. 0
    • Operator binarny: funkcja przyjmująca dwa argumenty
      • (x, y) -> x + y oznacza:
        • x – skumulowana wartość
        • y – aktualnie przetwarzany element
        • Operacja dodaje y do x, aż do przetworzenia wszystkich elementów
Wejście/wyjście i strumienie w Javie

Agregacja za pomocą Stream: przykład

  • Konwersja ArrayList names do obiektu Stream.
    Stream<String> stream = names.stream();
    
  • Użycie .map() do pobrania długości nazwy i .reduce() do ich zsumowania
    stream
      .map(name -> name.length())
      .reduce(0, (sum, length) -> sum + length);
    
  • Wynik: 20
Wejście/wyjście i strumienie w Javie

Czas na ćwiczenia!

Wejście/wyjście i strumienie w Javie

Preparing Video For Download...