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

1.

Функциональное программирование(направлено на вычисление без изменения состояния


объекта)
2. Функциональный интерфейс(Интерфейс имеющий не более одного абстрактного класса
3. Может ли ФИ содержать другие методы(может статичные и дефолтные)
4. Нотация Functionalinterface(для компилятора)
5. Дефолтный метод зачем (обратная связь)
6. Что такое анонимный класс(Разновидность вложенного класса без имени, полноценный
класс имеющий доступ к статичным переменным и переменным внешних классов, видны
только в том методе, в котором определены, анонимный класс не может содержать
статические переменные и методы. Можно создавать поля, можно наследовать, можно
спользовать одни переменные
Что такое лямбда выражение(Блок кода который можно передать, по сути лямбда-
выражение — это метод, завернутый в объект. И когда мы передаем куда-то такой объект
— мы, по сути, передаем этот один единственный метод Лямбда-выражение — это, по сути.
реализация функционального интерфейса. Где видим интерфейс с одним методом — значит, такой
анонимный класс можем переписать через лямбду. Если в интерфейсе больше/меньше одного
метода — тогда нам лямбда-выражение не подойдет, и будем использовать анонимный класс, или
даже обычный.)
7. Область видимости лямбд(В лямбда-выражении можно ссылаться только на
переменные, значения которых не меняются, Изменяющиеся переменные в
лямбда-выражениях не потокобезопасны )
8. Эффективная финальность( С java 8 появилось понятие — effectively final.
Применяется оно только к переменным (в том числе аргументам методов). Суть в том, что
не смотря на явное отсутствие ключевого слова final, значение переменной не
изменяется после инициализации. Другими словами, к такой переменной можно
подставить слово final без ошибки компиляции. effectively final переменные могут
быть использованы внутри локальных классов (Local Inner Classes), анонимных классов
(Anonymous Inner Classes), стримах (Stream API).)
9. Метод референс(квадроточие позволяет получить ссылку на метод, указанный в
правой части, класса, указанного в левой. Компилятор выводит тип ссылки из
контекста и приводит её к соответствующему функциональному интерфейсу.
В частности метод forEach принимает Consumer<? super T>, к нему и будет
приведена ссылка на метод println, возвращаемая
выражением System.out::println
10. Виды ссылок на методы(на статические методы на конструкторы
11. Способы реализации ФИ(класс, анонимный класс, лямбда, референс)
12. Стрим апи что такое
13. Для чего стримы (для работы в функциональном стиле)
14. Когда лучше использовать(для вычислений)
15. Виды стримов(параллельный последовательный, конечный бесконечныйФЯ)
16. Из чего получить(из коллекции collection.stream()
из значений Stream.of(значение1,… значениеN)
из массива Arrays.stream(массив)
из файла Files.lines(путь_к_файлу)
из строки «строка».chars()
С помощью Stream.builder Stream.builder().add(...)....build()
 Создание параллельного стрима collection.parallelStream()
Создание бесконечных стрима с помощью Stream.iterate
Stream.iterate(начальное_условие, выражение_генерации)

17. Методы стрима


1. Конвейерные — возвращают другой stream, то есть работают как builder,
2. Терминальные — возвращают другой объект, такой как коллекция, примитивы,
объекты, Optional и т.д.
18. Виды терминальных методов
19. Ленивый стрим
20. Разница в методах Peek и ForEach
21. Можно ли сделать 2 терминальных операции
22. Разница между Comparator и Comparable
23. Ссылки на конструктор (Ссылки на конструктор такие же, как ссылки на метод, за
исключением того, что именем метода является new)

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