Transformarea datelor cu Streams

Input/Output și Fluxuri în Java

Alex Liu

Software Development Engineer

Transformarea datelor cu streams

  • Transformarea datelor cu streams

    • Convertiți formate, agregați și filtrați date
    • Stocați rezultatele într-un nou tip de colecție (ex. din List în Set)
    • Colecții suportate:
      • Liste (ex. ArrayList, LinkedList)
      • Seturi (ex. HashSet, TreeSet)
      • Hărți (Keys/Values ca Streams) (ex. HashMap, TreeMap)
      • Tablouri (prin Arrays.stream())
  • Exemplu ArrayList numit names, utilizat în restul videoclipului

    names: ["Alice", "Bob", "Charlie", "David"]
    
Input/Output și Fluxuri în Java

Utilizarea Stream pentru transformarea elementelor

  • Pregătire: importați clasele 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();
  • Date curente: [Alice, Bob, Charlie, David]
Input/Output și Fluxuri în Java

Utilizarea Stream pentru transformarea elementelor (Continuare)

// Use `.map()` to convert each element to upper case
Stream<String> upperCaseNameStream = namesStream.map(
        name -> name.toUpperCase())
  • Date curente: [ALICE, BOB, CHARLIE, DAVID]
// use `.collect()` and `Collectors.toSet()` to store the transformed stream data
upperCaseNameStream.collect(Collectors.toSet())
  • Date finale:
    {CHARLIE, ALICE, BOB, DAVID}
    
Input/Output și Fluxuri în Java

Utilizarea Stream pentru agregare

  • Metoda .reduce()

    • Agregă elementele într-un singur rezultat
    • Utilă pentru sumare, concatenare sau găsirea min/max
  • .reduce() primește două argumente

    • Valoare inițială: valoarea de pornire a acumulării, ex. 0
    • Operator binar: o funcție cu două argumente
      • (x, y) -> x + y înseamnă:
        • x reprezintă totalul acumulat
        • y reprezintă elementul curent procesat
        • Operația adaugă y la x, până la procesarea tuturor elementelor
Input/Output și Fluxuri în Java

Utilizarea Stream pentru agregare: Exemplu

  • Convertiți ArrayList-ul names într-un obiect Stream.
    Stream<String> stream = names.stream();
    
  • Utilizați .map() pentru a obține lungimea fiecărui nume și .reduce() pentru a le suma
    stream
      .map(name -> name.length())
      .reduce(0, (sum, length) -> sum + length);
    
  • Rezultat: 20
Input/Output și Fluxuri în Java

Să exersăm!

Input/Output și Fluxuri în Java

Preparing Video For Download...