Введение в потоки

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

Alex Liu

Software Development Engineer

Работа с потоками

  • Java Streams

    • Функциональная обработка коллекций и повышение производительности для больших данных
    • Поддерживаемые коллекции:
      • Списки (например, ArrayList, LinkedList)
      • Множества (например, HashSet, TreeSet)
      • Словари (Keys/Values как Streams) (например, HashMap, TreeMap)
      • Массивы (через Arrays.stream())
  • Пример ArrayList с именем names для использования в этом видео

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

Использование лямбда-выражений с потоками

  • Лямбда-выражения
    • Синтаксис: (parameters) -> { expression }
names.forEach(
    // `name` is a parameter representing each element in the list
    name -> 
        // This is the expression executed for each element.
        System.out.println(name));
Alice 
Bob 
Charlie 
David
Ввод/вывод и потоки в Java

Создание потока

  • Преобразование коллекции в Stream

    • Используйте .stream() для коллекции
    • Поддерживает List, Set и Queue
  • Импорт класса Stream

    import java.util.stream.Stream;
    
  • Преобразование списка names в поток и использование .foreach() для обращения к каждому элементу.
    Stream<String> stream = names.stream();
    stream.forEach(name -> System.out.println(name));
    
Ввод/вывод и потоки в Java

Фильтрация данных с помощью потоков

  • Используйте .filter() для выборки элементов
    • Оставляет только подходящие элементы
  • Преобразование списка names в поток
    Stream<String> stream = names.stream();
    
  • Используйте .filter() для поиска элементов, начинающихся с A, и .forEach() для их вывода
    stream
      .filter(name -> name.startsWith("A"))
      .forEach(name -> System.out.println(name));
    
  • Результат фильтрации: Alice
Ввод/вывод и потоки в Java

Подсчёт элементов с помощью потоков

  • Используйте .count() для подсчёта элементов

    • Возвращает значение в формате long
  • Преобразование списка names в поток

    Stream<String> stream = names.stream();
    
  • Используйте .filter() для поиска элементов, начинающихся с B, и .count() для их подсчёта

    long count = names.stream()
      .filter(name -> name.startsWith("B"))
      .count();
    
  • Результат подсчёта: 1 (только 1 элемент Bob начинается с B)

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

Когда использовать потоки

  • Когда использовать Streams:
    • Для больших наборов данных: снижает накладные расходы
    • Для функциональных операций: читается лучше, чем циклы
    • Для фильтрации и преобразований: упрощает код
  • Когда НЕ стоит использовать Streams:
    • Для изменения исходных коллекций
    • Для простых циклов с побочными эффектами
Ввод/вывод и потоки в Java

Давайте потренируемся!

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

Preparing Video For Download...