Вы находитесь на странице: 1из 3

 Зачем нужно функциональное программирование, где оно применяется и

в чем его отличие от программирования в стиле ооп или в процедурном


стиле?

Функциональное программирование - это программирование с


математическими функциями.

Прежде всего, он должен быть ссылочно прозрачным (referentially transparent).


Ссылочно прозрачная функция всегда дает один и тот же результат, если
параметры те же.

Каждый метод в нашей кодовой базе - если он написан как математическая


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

1: f(o); 2: o.f();

Главное в ФП – это прозрачность и оно не меняет состояние.

 Что такое функциональный интерфейс?

Функциональный интерфейс (Functional Interface) - это интерфейс в языке


программирования, который определяет только один абстрактный
метод.

 Зачем нужна аннотация @FunctionalInterface? Обязательна ли она?

 Что такое default методы в интерфейсе и для чего они были введены?

Основная цель введения default методов заключается в поддержке


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

 Может ли функциональный интерфейс содержать что-то кроме


абстрактного метода?

default, static methods и поля

 Все способы реализации функционального интерфейса?

Анонимный класс, лямбда выражение, метод референс


 Что такое метод референс?

Это сокращенная запись, которая позволяет сослаться на уже


существующий метод со своей реализаций, который имеет такую же
сигнатуру метода и возвращаемое значение

 Что такое «анонимные классы»? 

в Java представляют собой специальный вид классов, которые могут


быть объявлены и созданы без явного указания имени класса. Они
используются для определения классов, которые нужны только в
определенном контексте и не требуют повторного использования.

 Как создать экземпляр анонимного класса?

Сослаться на класс или реализовать интерфейс

 Что такое лямбда-выражение? Как его записать?

Лямбда-выражение (Lambda Expression) в Java представляет собой компактный


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

 Расскажите про Comparator и Comparable?

Comparable - это интерфейс, который должен быть реализован классом,


чтобы объекты этого класса были сравнимы между собой. Реализация
Comparable позволяет объектам быть сортируемыми в естественном
порядке.

Comparator - это интерфейс, который определяет пользовательское


правило сравнения двух объектов. Реализация Comparator позволяет
независимо от класса определить различные способы сортировки
объектов.

 Что такое стримы? Для чего они нужны? Когда их лучше использовать?

Стримы (Streams) в Java представляют собой последовательность


элементов данных, которые могут быть обработаны в функциональном
стиле.

Полезны, когда работаем с данными непосредственно, без прочих side


effects(типа сохранения в бд, логированрия и тд)

Фильтрация и отбор элементов


Преобразование данных
Параллельная обработка:

 Какие есть виды стримов?


Разные типы, потому что на преобразование элемента в нужный тип
уходит время. Так что:

- Stream<T>: Это наиболее общий тип стрима, который работает с


элементами указанного типа T.

- IntStream, LongStream, DoubleStream

 Способы создания Стрима?

Stream.of("apple", "banana", "cherry");

Arrays.stream(array);

list.stream();

list.parallelStream();

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

операция, которая приводит к фактическому выполнению всех


промежуточных операций в стриме и производит конечный результат.

forEach, count, collect

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

Новый стрим, модифицированный или нет

 В чем разница map и flatMap?

Map работает с элементами и преобразует их


А FlatMap работает с элементами элементов, делает их них
стримы и может объединить(объединяет потоки)

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


 Можно ли вызвать 2 терминальные операции?
 Что будет, если терминальной операции не будет?
 Может ли стрим использоваться повторно?
 Для чего нужны параллельные стримы?
 В чём разница между forEach и peek?

Вам также может понравиться