Click to add text
Функциональное программирование
Основные принципы
1) Чистые функции - процесс вычисления представляет собой вычисление
значения функции(причем в математическом смысле) т. е без сайд-эффекта.
2) Функции высших порядков- можно оперировать не только объектами, но
и исполняемым кодом
3) Лямбда - можна объявить анонимную ф-цию в любом месте программы
4) Иммутабельность - созданный объект не может быть изменен, никогда
Retrolambda
Retrolambda
Click to add text
Лямбда выражения
Лямбда выражения
Выполнение блока кода
Лямбда без параметров
Лямбда с несколькими параметрами
Просто диалог 21 строчка
Просто диалог 6 строчек
Функциональные интерфейсы
Функции операторы
Функции высших порядков за работой
Больше примеров
Императивная версия
Удачной отладки)
Stream Api
Какой метод писался больше 2 минут?
Lightweight-Stream-Api
• Functional interfaces (Supplier, Function, Consumer etc);• Stream/IntStream/LongStream/DoubleStream (without parallel
processing, but with a variety of additional methods and with custom operators);• Optional/OptionalInt/OptionalLong/OptionalDouble classes;• Exceptional class - functional way to deal with exceptions;• Objects from Java 7.
Stream Api Создание• Stream.of(/* array | list | set | map | anything based on
Iterator/Iterable interface */) • Stream.of(value1, value2, value3)…• Stream.generate(new Random()::nextDouble).limit(10))• +Bonus IntStream, DoubleStream, LongStream• IntStream.range(0, 10)…
Stream Api Промежуточные функции
• filter(Predicate p)
• map(Function f)
• peek(Consumer c)
• limit(long max)
• skip(long n)
• distinct()
• sorted() / sorted(Comparator c)
• flatMap(Function f)
Stream Api Терминальные функции• collect(Collector c)
• forEach(Consumer c)
• findFirst()
• anyMatch(Predicate p), allMatch(Predicate p),
• noneMatch(Predicate p)
• flatMap(Function f)
• reduce(BiFunction f)
• count()
• min(Comparator c) / max(Comparator c)
Неизменяемые классы• легко конструировать, тестировать и использовать
• автоматически потокобезопасны и не имеют проблем синхронизации
• не требуют конструктора копирования
• позволяют выполнить «ленивую инициализацию» хэш кода и кэшировать возвращаемое значение
• не требуют защищенного копирования, когда используются как поле
• делают хорошие Map ключи и Set элементы (эти объекты не должны менять состояние, когда находятся в
коллекции)
• делают свой класс постоянным, единожды создав его, а он не нуждается в повторной проверке
• всегда имеют «атомарность по отношению к сбою» (failure atomicity): если неизменяемый объект бросает
исключение, он никогда не останется в нежелательном или неопределенном состоянии. Исключение если такие
возможны, будут возникать еще до создания объекта, Но невалидных объектов среди созданных быть не может.
Куда пропали геттеры?
Stream Api продолжение
Повышаем градус
Императивный ужас в прошлом
Click to add text
Recommended