Transformace dat pomocí streamů

Input/Output and Streams in Java

Alex Liu

Software Development Engineer

Transformace dat pomocí streamů

  • Transformace dat pomocí streamů

    • Převod formátů dat, agregace a filtrování informací
    • Výsledky uloženy do nového typu kolekce (např. z List na Set)
    • Podporované kolekce:
      • Seznamy (např. ArrayList, LinkedList)
      • Množiny (např. HashSet, TreeSet)
      • Mapy (Keys/Values jako Streams) (např. HashMap, TreeMap)
      • Pole (přes Arrays.stream())
  • Příklad ArrayList s názvem names pro zbytek videa

    names: ["Alice", "Bob", "Charlie", "David"]
    
Input/Output and Streams in Java

Transformace prvků pomocí streamu

  • Příprava: import tříd Set, Collectors a 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();
  • Aktuální data: [Alice, Bob, Charlie, David]
Input/Output and Streams in Java

Transformace prvků pomocí streamu (pokračování)

// Use `.map()` to convert each element to upper case
Stream<String> upperCaseNameStream = namesStream.map(
        name -> name.toUpperCase())
  • Aktuální data: [ALICE, BOB, CHARLIE, DAVID]
// use `.collect()` and `Collectors.toSet()` to store the transformed stream data
upperCaseNameStream.collect(Collectors.toSet())
  • Výsledná data:
    {CHARLIE, ALICE, BOB, DAVID}
    
Input/Output and Streams in Java

Agregace pomocí streamu

  • Metoda .reduce()

    • Agreguje prvky do jediného výsledku
    • Vhodná pro součet, zřetězení nebo hledání min/max
  • Metoda .reduce() přijímá dva vstupy

    • Počáteční hodnota: výchozí hodnota akumulace, např. 0
    • Binární operátor: funkce se dvěma argumenty
      • (x, y) -> x + y znamená:
        • x představuje dosavadní součet
        • y představuje aktuálně zpracovávaný prvek
        • Operace přičte y k x, dokud nejsou zpracovány všechny prvky
Input/Output and Streams in Java

Agregace pomocí streamu: příklad

  • Převod ArrayList names na objekt Stream.
    Stream<String> stream = names.stream();
    
  • Pomocí .map() převedeme jméno na jeho délku a .reduce() hodnoty sečteme
    stream
      .map(name -> name.length())
      .reduce(0, (sum, length) -> sum + length);
    
  • Výsledek: 20
Input/Output and Streams in Java

Pojďme cvičit!

Input/Output and Streams in Java

Preparing Video For Download...