Datatransformering med Streams

Input/Output och strömmar i Java

Alex Liu

Software Development Engineer

Datatransformering med streams

  • Datatransformering med streams

    • Konvertera dataformat, aggregera och filtrera information
    • Lagra resultat i ny datainsamlingstyp (t.ex. från List till Set)
    • Stödda samlingar:
      • Listor (t.ex. ArrayList, LinkedList)
      • Mängder (t.ex. HashSet, TreeSet)
      • Kartor (Keys/Values som Streams) (t.ex. HashMap, TreeMap)
      • Arrayer (via Arrays.stream())
  • Exempelsamling ArrayList med namnet names att använda resten av videon

    names: ["Alice", "Bob", "Charlie", "David"]
    
Input/Output och strömmar i Java

Transformera element med Stream

  • Förberedelse: importera klasserna Set, Collectors och 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();
  • Aktuell data: [Alice, Bob, Charlie, David]
Input/Output och strömmar i Java

Transformera element med Stream (forts.)

// Use `.map()` to convert each element to upper case
Stream<String> upperCaseNameStream = namesStream.map(
        name -> name.toUpperCase())
  • Aktuell data: [ALICE, BOB, CHARLIE, DAVID]
// use `.collect()` and `Collectors.toSet()` to store the transformed stream data
upperCaseNameStream.collect(Collectors.toSet())
  • Slutlig data:
    {CHARLIE, ALICE, BOB, DAVID}
    
Input/Output och strömmar i Java

Aggregering med Stream

  • Metoden .reduce()

    • Aggregerar element till ett enda resultat
    • Användbar för summering, konkatenering eller att hitta min/max
  • .reduce() tar två indata

    • Startvärde: utgångsvärdet för ackumuleringen, t.ex. 0
    • Binär operator: en funktion som tar två argument
      • (x, y) -> x + y betyder:
        • x representerar det ackumulerade totalen
        • y representerar det aktuella elementet som bearbetas
        • Operationen adderar y till x tills alla element har bearbetats
Input/Output och strömmar i Java

Aggregering med Stream: exempel

  • Konvertera ArrayList names till ett Stream-objekt.
    Stream<String> stream = names.stream();
    
  • Använd .map() för att omvandla varje namn till dess längd och .reduce() för att summera dem
    stream
      .map(name -> name.length())
      .reduce(0, (sum, length) -> sum + length);
    
  • Resultat: 20
Input/Output och strömmar i Java

Nu kör vi en övning!

Input/Output och strömmar i Java

Preparing Video For Download...