Java: Стримы
Теория: Декларативное программирование
Декларативное программирование - это парадигма программирования, которая фокусируется на том, что компьютер должен сделать, а не том как это сделать. В этом уроке мы познакомимся с основами декларативного программирования и примерами его применения.
До сих пор мы, в основном, программировали в императивном стиле, в котором фокус идет на том как выполняется код. Классический пример это циклы, где мы указываем последовательность шагов, которые нужно выполнить, чтобы добиться нужного результата. Каждый шаг это ответ на вопрос как. Возьмем для примера сортировку пузырьком:
Этот алгоритм мы можем описать как последовательность шагов:
- Берем очередной элемент в списке, начиная с первого.
- Начинаем очередной проход по списку
- Если текущий элемент больше следующего, то
- Создаем временную переменную, куда записываем текущий элемент.
- Меняем текущий элемент на следующий.
- Меняем следующий элемент на текущий через временную переменную.
- Если прошлись по всему списку, то возвращаемся к началу
- Если текущий элемент больше следующего, то
Этот алгоритм происходит идентично для любой сортировки, единственное, что меняется внутри него при изменении условий сортировки это сама проверка на то, надо ли менять элементы или нет. Представьте, что вам надо регулярно сортировать разные коллекции по разным условиям. Будет довольно сложно оторвать пошаговый процесс сортировки от самого способа сортировки, нам постоянно придется спускаться на уровень перебора элементов дублируя его для каждой сортировки.
Именно такие задачи отлично решает декларативное программирование. Мы можем выделить процесс перебора и спрятать его таким образом, чтобы программисту осталось только показать как сравнивать два элемента между собой. Так мы получим декларативный код, который отвечает на вопрос "что мы хотим получить?", а вся логика сортировки, то есть того, как мы хотим этого получить, будет скрыта.
Больше не нужно думать о том, как конкретно происходит сортировка, мы можем сосредоточиться только на том, что мы хотим получить. Примерно так работают стримы, они прячут перебор коллекций от нас так, чтобы мы могли фокусироваться на решаемой задаче.
Стримы
Стримы представляют собой последовательность элементов с набором методов позволяющих преобразовывать эти элементы и выполнять над ними разнообразные вычисления. Исходная коллекция, в большинстве случаев, не меняется. Посмотрите на пример ниже. В течении курса вы научитесь не только понимать этот код, но и сможете написать его самостоятельно.
Основные элементы работы со стримами:
- Коллекция сама по себе не является стримом, сначала нужно выполнить преобразование. В случае списков для этого нужно вызвать метод
stream(). - Почти всегда в конце работы стрима нужно преобразовать его в список
toList(). Почему и зачем мы поговорим позже
Так как эти методы возвращают коллекцию, то мы можем объединять их в цепочки, создавая более сложные варианты обработки данных. Благодаря разделению и возможности комбинации, стримы позволяют решать большинство задач преобразования коллекций без необходимости возвращаться к циклам. Начиная со следующего урока мы рассмотрим подробно самые важные методы стримов.
Стримы работают и для массивов. Чтобы сделать стрим из массива, нужно вызвать метод Arrays.stream().
Дальнейшая работа со стримом не зависит от того из чего он был получен. Об этом в следующих уроках.
Рекомендуемые программы
Завершено
0 / 10

