Главная страница
Навигация по странице:

  • Для чего нужен

  • Какие бывают стримы

  • Что такое ленивая инициализация стрима

  • Что возвращают промежуточные операции над стримом

  • Что такое терминальная операция

  • Две терминальные операции в одном выражении

  • В каком пакете находится Stream

  • Ревью 7. Ревью 7 - Функциональные Интерфейсы, Streams. Чем является Stream в контексте Java 3 Для чего нужен 3


    Скачать 84.11 Kb.
    НазваниеЧем является Stream в контексте Java 3 Для чего нужен 3
    АнкорРевью 7
    Дата19.01.2023
    Размер84.11 Kb.
    Формат файлаdocx
    Имя файлаРевью 7 - Функциональные Интерфейсы, Streams.docx
    ТипДокументы
    #894719
    страница2 из 9
    1   2   3   4   5   6   7   8   9

    Чем является Stream в контексте Java?


    Интерфейс java.util.Stream представляет собой последовательность элементов, над которой можно производить различные операции.

    Stream API — это новый способ работать со структурами данных в функциональном стиле. Stream (поток) API (описание способов, которыми одна компьютерная программа может взаимодействовать с другой программой) — это по своей сути поток данных. Сам термин "поток" довольно размыт в программировании в целом и в Java в частности.

    Для чего нужен?


    С появлением Java 8 Stream API позволило программистам писать существенно короче то, что раньше занимало много строк кода, а именно — упростить работу с наборами данных, в частности, упростить операции фильтрации, сортировки и другие манипуляции с данными. Если у вас промежуточных операций нет, часто можно и нужно обойтись без стрима, иначе код будет сложнее чем без потока.

    Какие бывают стримы?


    Java Stream API предлагает два вида методов:

    1. Конвейерные — возвращают другой stream, то есть работают как builder,

    2. Терминальные — возвращают другой объект, такой как коллекция, примитивы, объекты, Optional и т.д.

    Общее правило: у stream'a может быть сколько угодно вызовов конвейерных вызовов и в конце один терминальный, при этом все конвейерные методы выполняются лениво и пока не будет вызван терминальный метод никаких действий на самом деле не происходит, так же как создать объект Thread или Runnable, но не вызвать у него start.

    2) последовательные и параллельные;

    Стримы бывают последовательными (sequential) и параллельными (parallel). Последовательные выполняются только в текущем потоке, а вот параллельные используют общий пул ForkJoinPool.commonPool(). При этом элементы разбиваются (если это возможно) на несколько групп и обрабатываются в каждом потоке отдельно. Затем на нужном этапе группы объединяются в одну для предоставления конечного результата.

    Чтобы получить параллельный стрим, нужно либо вызвать метод parallelStream() вместо stream(), либо превратить обычный стрим в параллельный, вызвав промежуточный оператор parallel.

    1. объектные и примитивные;

    Специальные типы стримов для примитивных типов:

    - LongStream(),

    - DoubleStream(),

    - IntStream().

    Что такое ленивая инициализация стрима?


    Ленивая инициализация — это концепция отсрочки создания объекта до тех пор, пока объект не будет фактически впервые использован. При правильном использовании это может привести к значительному повышению производительности. Все промежуточные операции выполняются только тогда, когда есть терминальная операция.

    Что возвращают промежуточные операции над стримом?


    Промежуточные операции возвращают трансформированный поток. К возвращенному потоку также можно применить ряд промежуточных операций, либо терминальную операцию.

    Что такое терминальная операция?


    Конечные или терминальные операции возвращают конкретный результат. После этого никаких промежуточных операций применять нельзя.

    Две терминальные операции в одном выражении?


    нет

    Что возвращают промежуточные операции над стримом?


    Промежуточные операции возвращают трансформированный стрим. Конечные или терминальные операции возвращают конкретный результат.

    В каком пакете находится Stream?


    Вся основная функциональность данного API сосредоточена в пакете java. util. stream.

    Чем Stream отличается от итератора?


    Порядок в обходе от итератора может быть задан и заранее определен. Стоимость (затраты мощностей процессора) доступа к элементам в стримах гораздо ниже. Протокол Iterator принципиально менее эффективен. Для получения каждого элемента требуется вызов двух методов. Кроме того, поскольку итераторы должны быть устойчивы к таким вещам, как вызов next() без hasNext() или hasNext() несколько раз без next(), оба этих метода обычно должны выполнять некоторую защитную кодировку ( и, как правило, больше состояния и ветвления), что увеличивает неэффективность.
    1   2   3   4   5   6   7   8   9


    написать администратору сайта