Transformação de dados com Streams

Entrada/Saída e Streams em Java

Alex Liu

Software Development Engineer

Transformação de dados com streams

  • Transformação de dados com streams

    • Converter formatos, agregar e filtrar informações
    • Armazenar resultados em outro tipo de coleção (ex.: de List para Set)
    • Coleções compatíveis:
      • Lists (ex.: ArrayList, LinkedList)
      • Sets (ex.: HashSet, TreeSet)
      • Maps (Keys/Values como Streams) (ex.: HashMap, TreeMap)
      • Arrays (via Arrays.stream())
  • ArrayList de exemplo chamado names para usar no restante do vídeo

    names: ["Alice", "Bob", "Charlie", "David"]
    
Entrada/Saída e Streams em Java

Usando Stream para transformar elementos

  • Preparação: importar as classes necessárias Set, Collectors e 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();
  • Dados atuais: [Alice, Bob, Charlie, David]
Entrada/Saída e Streams em Java

Usando Stream para transformar elementos (continuação)

// Use `.map()` to convert each element to upper case
Stream<String> upperCaseNameStream = namesStream.map(
        name -> name.toUpperCase())
  • Dados atuais: [ALICE, BOB, CHARLIE, DAVID]
// use `.collect()` and `Collectors.toSet()` to store the transformed stream data
upperCaseNameStream.collect(Collectors.toSet())
  • Dados finais:
    {CHARLIE, ALICE, BOB, DAVID}
    
Entrada/Saída e Streams em Java

Usando Stream para agregação

  • O método .reduce()

    • Agrega elementos em um único resultado
    • Útil para soma, concatenação ou achar min/máx
  • Uso de .reduce() recebe duas entradas

    • Valor inicial: ponto de partida da acumulação, ex.: 0
    • Operador binário: função que recebe dois argumentos
      • (x, y) -> x + y significa:
        • x é o total acumulado
        • y é o elemento atual sendo processado
        • A operação soma y a x até processar todos os elementos
Entrada/Saída e Streams em Java

Usando Stream para agregação: Exemplo

  • Converta o ArrayList names em um objeto Stream.
    Stream<String> stream = names.stream();
    
  • Use .map() para converter o nome em seu comprimento e .reduce() para somá-los
    stream
      .map(name -> name.length())
      .reduce(0, (sum, length) -> sum + length);
    
  • Resultado: 20
Entrada/Saída e Streams em Java

Vamos praticar!

Entrada/Saída e Streams em Java

Preparing Video For Download...