Перетворення даних за допомогою Streams

Ввід/вивід і потоки в Java

Alex Liu

Software Development Engineer

Перетворення даних за допомогою streams

  • Перетворення даних за допомогою streams

    • Змінюйте формати, агрегуйте й фільтруйте дані
    • Зберігайте результат у новому типі колекції (напр., з List у Set)
    • Підтримувані колекції:
      • Списки (напр., ArrayList, LinkedList)
      • Множини (напр., HashSet, TreeSet)
      • Мапи (Keys/Values як Streams) (напр., HashMap, TreeMap)
      • Масиви (через Arrays.stream())
  • Приклад ArrayList з назвою names для використання впродовж відео

    names: ["Alice", "Bob", "Charlie", "David"]
    
Ввід/вивід і потоки в Java

Використання Stream для трансформації елементів

  • Підготовка: імпортуйте потрібні класи Set, Collectors і 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();
  • Поточні дані: [Alice, Bob, Charlie, David]
Ввід/вивід і потоки в Java

Використання Stream для трансформації елементів (продовження)

// Use `.map()` to convert each element to upper case
Stream<String> upperCaseNameStream = namesStream.map(
        name -> name.toUpperCase())
  • Поточні дані: [ALICE, BOB, CHARLIE, DAVID]
// use `.collect()` and `Collectors.toSet()` to store the transformed stream data
upperCaseNameStream.collect(Collectors.toSet())
  • Фінальні дані:
    {CHARLIE, ALICE, BOB, DAVID}
    
Ввід/вивід і потоки в Java

Використання Stream для агрегації

  • Метод .reduce()

    • Агрегує елементи в один результат
    • Корисний для суми, конкатенації або пошуку мін/макс
  • Використання .reduce() приймає два параметри

    • Початкове значення: стартове значення акумуляції, напр., 0
    • Бінарний оператор: функція з двома аргументами
      • (x, y) -> x + y означає:
        • x — накопичена сума
        • y — поточний елемент
        • Операція додає y до x, доки всі елементи не оброблено
Ввід/вивід і потоки в Java

Використання Stream для агрегації: приклад

  • Перетворіть ArrayList names на об'єкт Stream.
    Stream<String> stream = names.stream();
    
  • Використайте .map() для перетворення імені на його довжину та .reduce() для підсумовування
    stream
      .map(name -> name.length())
      .reduce(0, (sum, length) -> sum + length);
    
  • Результат: 20
Ввід/вивід і потоки в Java

Давайте потренуємось!

Ввід/вивід і потоки в Java

Preparing Video For Download...