SlideShare une entreprise Scribd logo
1  sur  28
Télécharger pour lire hors ligne
Введение в сетевые
технологии
Виталий Унгурян
unguryan@itstep.org
Методы интерфейсов по умолчанию
Java 8 позволяет вам добавлять
не абстрактные реализации
методов в интерфейс,
используя ключевое слово
default.
Эта новшество также известно,
как метод расширения.
Лямбда - выражения
Лямбда - выражение
представляет собой блок кода,
который можно передать в
другое место, поэтому он может
быть выполнен позже, один или
несколько раз.
Лямбда - выражения
Синтаксис
(список параметров) -> исполняемый код;
(String firstStr, String secondStr) -> {
if (firstStr.length() < secondStr.length()) return -1;
else if (firstStr.length() > secondStr.length()) return 1;
else return 0;
}
Лямбда - выражения
Если лямбда-выражение не имеет
параметров, вы все равно необходимо
ставить пустые скобки.
() -> {
for (int i = 0; i < 1000; i++) doWork();
}
Функциональные интерфейсы
Каждой лямбде соответствует тип,
представленный интерфейсом. Так
называемый функциональный
интерфейс должен содержать ровно
один абстрактный метод. Каждое
лямбда-выражение этого типа будет
сопоставлено объявленному методу.
Ссылки на методы и конструкторы
Java 8 позволяет вам передавать
ссылки на методы или конструкторы.
Для этого нужно использовать
оператор ::
Области действия лямбд
Доступ к переменным внешней области
действия из лямбда-выражения очень
схож к доступу из анонимных классов.
Вы можете ссылаться на переменные,
объявленные как final, на экземплярные
поля класса и статические переменные.
Доступ к методам интерфейсов по умолчанию
Внутри лямбда-выражений запрещено
обращаться к методам по умолчанию.
Следующий код не скомпилируется:
Formula formula = (a) -> sqrt( a * 100);
Встроенные функциональные интерфейсы
В JDK 1.8 содержит множество
встроенных функциональных
интерфейсов. Некоторые из них хорошо
известны по предыдущим версиям
языка, например, Comparator или
Runnable. Все эти интерфейсы были
поддержаны в лямбдах добавлением
аннотации @FunctionalInterface.
Встроенные функциональные интерфейсы
Однако в Java 8 также появилось много
новых функциональных интерфейсов.
Предикаты
Предикаты — это функции,
принимающие один аргумент, и
возвращающие значение типа boolean.
Интерфейс содержит различные методы
по умолчанию, позволяющие строить
сложные условия (and, or, negate).
Функции
Функции принимают один аргумент и
возвращают некоторый результат.
Методы по умолчанию могут
использоваться для построения цепочек
вызовов (compose, andThen).
Поставщики
Поставщики (suppliers) предоставляют
результат заданного типа. В отличии от
функций, поставщики не принимают
аргументов.
Потребители
Потребители (consumers) представляют
собой операции, которые производятся
на одним входным аргументом.
Компараторы
Компараторы хорошо известны по
предыдущим версиям Java. Java 8
добавляет в интерфейс различные
методы по умолчанию.
Опциональные значения
Опциональные значения (optionals) не
являются функциональными
интерфейсами, однако являются
удобным средством предотвращения
NullPointerException.
Опциональные значения
Опциональные значение — это по сути
контейнер для значения, которое может
быть равно null. Например, вам нужен
метод, который возвращает какое-то
значение, но иногда он должен
возвращать пустое значение. Вместо
того, чтобы возвращать null, в Java 8 вы
можете вернуть опциональное
значение.
Потоки
Тип java.util.Stream представляет собой
последовательность элементов, над
которой можно производить различные
операции. Операции над потоками
бывают или промежуточными
(intermediate) или конечными (terminal).
параллельно.
Потоки
Конечные операции возвращают
результат определённого типа, а
промежуточные операции возвращают
тот же поток.
Таким образом вы можете строить
цепочки из несколько операций над
одним и тем же потоком.
Потоки
Поток создаются на основе источников,
например типов, реализующих
java.util.Collection, такие как списки или
множества (ассоциативные массивы не
поддерживаются). Операции над
потоками могут выполняться как
последовательно, так и параллельно.
Filter
Операция Filter принимает предикат,
который фильтрует все элементы
потока. Эта операция является
промежуточной, т.е. позволяет нам
вызвать другую операцию (например,
forEach) над результатом. ForEach
принимает функцию, которая
вызывается для каждого элемента в
(уже отфильтрованном) поток.
Sorted
Операция Sorted является
промежуточной операцией, которая
возвращает отсортированное
представление потока. Элементы
сортируются в обычном порядке, если
вы не предоставили свой компаратор.
Помните, что sorted создаёт всего лишь
отсортированное представление и не влияет
на порядок элементов в исходной коллекции.
Map
Промежуточная операция map
преобразовывает каждый элемент в
другой объект при помощи переданной
функции.
Match
Для проверки, удовлетворяет ли поток
заданному предикату, используются
различные операции сопоставления
(match). Все операции сопоставления
являются конечными и возвращают
результат типа boolean.
Count
Операция Count является конечной
операцией и возвращает количество
элементов в потоке. Типом
возвращаемого значения является long.
Reduce
Эта конечная операция производит
свертку элементов потока по заданной
функции. Результатом является
опциональное значение.
Параллельные потоки
Эта конечная операция производит
свертку элементов потока по заданной
функции. Результатом является
опциональное значение.

Contenu connexe

Tendances

Исключения и ошибки
Исключения и ошибкиИсключения и ошибки
Исключения и ошибкиUnguryan Vitaliy
 
Ввведение в java
Ввведение в javaВвведение в java
Ввведение в javaUnguryan Vitaliy
 
Java. Строки. Класс String.
Java. Строки. Класс String.Java. Строки. Класс String.
Java. Строки. Класс String.Unguryan Vitaliy
 
Java. Cистемы счислния, битовые операции
Java. Cистемы счислния, битовые операцииJava. Cистемы счислния, битовые операции
Java. Cистемы счислния, битовые операцииUnguryan Vitaliy
 
Введение в язык программирования «Java»
Введение в язык программирования «Java»Введение в язык программирования «Java»
Введение в язык программирования «Java»Unguryan Vitaliy
 
Сетевое взаимодействие
Сетевое взаимодействиеСетевое взаимодействие
Сетевое взаимодействиеUnguryan Vitaliy
 
C++ Базовый. Занятие 02.
C++ Базовый. Занятие 02.C++ Базовый. Занятие 02.
C++ Базовый. Занятие 02.Igor Shkulipa
 
Discovering Lambdas in Java 8
Discovering Lambdas in Java 8Discovering Lambdas in Java 8
Discovering Lambdas in Java 8Stfalcon Meetups
 
Java. Наследование.
Java. Наследование.Java. Наследование.
Java. Наследование.Unguryan Vitaliy
 
Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.Unguryan Vitaliy
 
Алгоритмы поиска и сортировки
Алгоритмы  поиска и сортировкиАлгоритмы  поиска и сортировки
Алгоритмы поиска и сортировкиUnguryan Vitaliy
 
Java. Массивы. Многомерные массивы.
Java. Массивы. Многомерные массивы.Java. Массивы. Многомерные массивы.
Java. Массивы. Многомерные массивы.Unguryan Vitaliy
 
Глава 3: примитивные типы и операции с ними в Java
Глава 3: примитивные типы и операции с ними в JavaГлава 3: примитивные типы и операции с ними в Java
Глава 3: примитивные типы и операции с ними в Javametaform
 
Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.Unguryan Vitaliy
 

Tendances (14)

Исключения и ошибки
Исключения и ошибкиИсключения и ошибки
Исключения и ошибки
 
Ввведение в java
Ввведение в javaВвведение в java
Ввведение в java
 
Java. Строки. Класс String.
Java. Строки. Класс String.Java. Строки. Класс String.
Java. Строки. Класс String.
 
Java. Cистемы счислния, битовые операции
Java. Cистемы счислния, битовые операцииJava. Cистемы счислния, битовые операции
Java. Cистемы счислния, битовые операции
 
Введение в язык программирования «Java»
Введение в язык программирования «Java»Введение в язык программирования «Java»
Введение в язык программирования «Java»
 
Сетевое взаимодействие
Сетевое взаимодействиеСетевое взаимодействие
Сетевое взаимодействие
 
C++ Базовый. Занятие 02.
C++ Базовый. Занятие 02.C++ Базовый. Занятие 02.
C++ Базовый. Занятие 02.
 
Discovering Lambdas in Java 8
Discovering Lambdas in Java 8Discovering Lambdas in Java 8
Discovering Lambdas in Java 8
 
Java. Наследование.
Java. Наследование.Java. Наследование.
Java. Наследование.
 
Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.
 
Алгоритмы поиска и сортировки
Алгоритмы  поиска и сортировкиАлгоритмы  поиска и сортировки
Алгоритмы поиска и сортировки
 
Java. Массивы. Многомерные массивы.
Java. Массивы. Многомерные массивы.Java. Массивы. Многомерные массивы.
Java. Массивы. Многомерные массивы.
 
Глава 3: примитивные типы и операции с ними в Java
Глава 3: примитивные типы и операции с ними в JavaГлава 3: примитивные типы и операции с ними в Java
Глава 3: примитивные типы и операции с ними в Java
 
Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.
 

En vedette

Аннотации в java
Аннотации в javaАннотации в java
Аннотации в javaUnguryan Vitaliy
 
Рефлексия в java
Рефлексия в javaРефлексия в java
Рефлексия в javaUnguryan Vitaliy
 
Введение в сетевые технологии
Введение в сетевые технологииВведение в сетевые технологии
Введение в сетевые технологииUnguryan Vitaliy
 
What's new in Java 8
What's new in Java 8What's new in Java 8
What's new in Java 8jclingan
 
whats new in java 8
whats new in java 8 whats new in java 8
whats new in java 8 Dori Waldman
 
TDC 2015 - Java: from old school to modern art!
TDC 2015 - Java: from old school to modern art!TDC 2015 - Java: from old school to modern art!
TDC 2015 - Java: from old school to modern art!Marcos Ferreira
 
from old java to java8 - KanJava Edition
from old java to java8 - KanJava Editionfrom old java to java8 - KanJava Edition
from old java to java8 - KanJava Edition心 谷本
 
10 Sets of Best Practices for Java 8
10 Sets of Best Practices for Java 810 Sets of Best Practices for Java 8
10 Sets of Best Practices for Java 8Garth Gilmour
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.Unguryan Vitaliy
 
Java. Инкапсуляция.
Java. Инкапсуляция.Java. Инкапсуляция.
Java. Инкапсуляция.Unguryan Vitaliy
 
Java. Конструкторы класса и инициализация
Java. Конструкторы класса и инициализация Java. Конструкторы класса и инициализация
Java. Конструкторы класса и инициализация Unguryan Vitaliy
 

En vedette (20)

Аннотации в java
Аннотации в javaАннотации в java
Аннотации в java
 
JDBC
JDBCJDBC
JDBC
 
Рефлексия в java
Рефлексия в javaРефлексия в java
Рефлексия в java
 
Введение в сетевые технологии
Введение в сетевые технологииВведение в сетевые технологии
Введение в сетевые технологии
 
Сервлеты
СервлетыСервлеты
Сервлеты
 
XML
XMLXML
XML
 
Java SE 8 best practices
Java SE 8 best practicesJava SE 8 best practices
Java SE 8 best practices
 
JSP
JSPJSP
JSP
 
JSTL
JSTLJSTL
JSTL
 
What's new in Java 8
What's new in Java 8What's new in Java 8
What's new in Java 8
 
whats new in java 8
whats new in java 8 whats new in java 8
whats new in java 8
 
TDC 2015 - Java: from old school to modern art!
TDC 2015 - Java: from old school to modern art!TDC 2015 - Java: from old school to modern art!
TDC 2015 - Java: from old school to modern art!
 
Java 8 Features
Java 8 FeaturesJava 8 Features
Java 8 Features
 
Java 8: the good parts!
Java 8: the good parts!Java 8: the good parts!
Java 8: the good parts!
 
from old java to java8 - KanJava Edition
from old java to java8 - KanJava Editionfrom old java to java8 - KanJava Edition
from old java to java8 - KanJava Edition
 
10 Sets of Best Practices for Java 8
10 Sets of Best Practices for Java 810 Sets of Best Practices for Java 8
10 Sets of Best Practices for Java 8
 
Uml
UmlUml
Uml
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.
 
Java. Инкапсуляция.
Java. Инкапсуляция.Java. Инкапсуляция.
Java. Инкапсуляция.
 
Java. Конструкторы класса и инициализация
Java. Конструкторы класса и инициализация Java. Конструкторы класса и инициализация
Java. Конструкторы класса и инициализация
 

Similaire à java 8

Msu.Center.Lectures.J01 Introducing Java
Msu.Center.Lectures.J01 Introducing JavaMsu.Center.Lectures.J01 Introducing Java
Msu.Center.Lectures.J01 Introducing Javaolegol
 
C++ Базовый. Занятие 03.
C++ Базовый. Занятие 03.C++ Базовый. Занятие 03.
C++ Базовый. Занятие 03.Igor Shkulipa
 
03_JavaBasicConstructionsAndDatatypes
03_JavaBasicConstructionsAndDatatypes03_JavaBasicConstructionsAndDatatypes
03_JavaBasicConstructionsAndDatatypesdklenov
 
C# Desktop. Занятие 16.
C# Desktop. Занятие 16.C# Desktop. Занятие 16.
C# Desktop. Занятие 16.Igor Shkulipa
 
01 - Знакомство с Java
01 - Знакомство с Java01 - Знакомство с Java
01 - Знакомство с Javaphearnot
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6Technopark
 
Андрей Кирпичев "Гибкая модульность инструментами АОП"
Андрей Кирпичев  "Гибкая модульность инструментами АОП"Андрей Кирпичев  "Гибкая модульность инструментами АОП"
Андрей Кирпичев "Гибкая модульность инструментами АОП"MskDotNet Community
 
API design in java project
API design in java projectAPI design in java project
API design in java projectchashnikov
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?Vasil Remeniuk
 
Погружение в Dart
Погружение в DartПогружение в Dart
Погружение в DartSergey Penkovsky
 
javascript_part1
javascript_part1javascript_part1
javascript_part1sovest
 
javascript
javascriptjavascript
javascriptsovest
 

Similaire à java 8 (20)

Msu.Center.Lectures.J01 Introducing Java
Msu.Center.Lectures.J01 Introducing JavaMsu.Center.Lectures.J01 Introducing Java
Msu.Center.Lectures.J01 Introducing Java
 
Обзор Ruby
Обзор RubyОбзор Ruby
Обзор Ruby
 
Java 9 - Back to the Future
Java 9 - Back to the FutureJava 9 - Back to the Future
Java 9 - Back to the Future
 
C++ Базовый. Занятие 03.
C++ Базовый. Занятие 03.C++ Базовый. Занятие 03.
C++ Базовый. Занятие 03.
 
03_JavaBasicConstructionsAndDatatypes
03_JavaBasicConstructionsAndDatatypes03_JavaBasicConstructionsAndDatatypes
03_JavaBasicConstructionsAndDatatypes
 
C# Desktop. Занятие 16.
C# Desktop. Занятие 16.C# Desktop. Занятие 16.
C# Desktop. Занятие 16.
 
Step 1
Step 1Step 1
Step 1
 
01 - Знакомство с Java
01 - Знакомство с Java01 - Знакомство с Java
01 - Знакомство с Java
 
Underscore js
Underscore jsUnderscore js
Underscore js
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6
 
Step 5
Step 5Step 5
Step 5
 
Андрей Кирпичев "Гибкая модульность инструментами АОП"
Андрей Кирпичев  "Гибкая модульность инструментами АОП"Андрей Кирпичев  "Гибкая модульность инструментами АОП"
Андрей Кирпичев "Гибкая модульность инструментами АОП"
 
API design in java project
API design in java projectAPI design in java project
API design in java project
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?
 
Scala lecture #4
Scala lecture #4Scala lecture #4
Scala lecture #4
 
Погружение в Dart
Погружение в DartПогружение в Dart
Погружение в Dart
 
Step 3.2
Step 3.2Step 3.2
Step 3.2
 
Javascript 1
Javascript 1Javascript 1
Javascript 1
 
javascript_part1
javascript_part1javascript_part1
javascript_part1
 
javascript
javascriptjavascript
javascript
 

Plus de Unguryan Vitaliy

Модульное тестирование.
Модульное тестирование. Модульное тестирование.
Модульное тестирование. Unguryan Vitaliy
 
Архитектурный шаблон MVC
Архитектурный шаблон MVCАрхитектурный шаблон MVC
Архитектурный шаблон MVCUnguryan Vitaliy
 
Работа в команде, управление программными проектами
Работа в команде, управление программными проектамиРабота в команде, управление программными проектами
Работа в команде, управление программными проектамиUnguryan Vitaliy
 
Системы контроля версий
Системы контроля версийСистемы контроля версий
Системы контроля версийUnguryan Vitaliy
 
Шаблоны проектирования GoF
Шаблоны проектирования GoFШаблоны проектирования GoF
Шаблоны проектирования GoFUnguryan Vitaliy
 
Введение в hibernate
Введение в hibernateВведение в hibernate
Введение в hibernateUnguryan Vitaliy
 
Введение в Spring
Введение в SpringВведение в Spring
Введение в SpringUnguryan Vitaliy
 
Cookies, session и другое в JSP
Cookies, session и другое в JSPCookies, session и другое в JSP
Cookies, session и другое в JSPUnguryan Vitaliy
 
Java. Интерфейс Reference - типы ссылок
Java. Интерфейс Reference -  типы ссылокJava. Интерфейс Reference -  типы ссылок
Java. Интерфейс Reference - типы ссылокUnguryan Vitaliy
 
Java. Интерфейс Queue - очередь
Java. Интерфейс Queue - очередьJava. Интерфейс Queue - очередь
Java. Интерфейс Queue - очередьUnguryan Vitaliy
 
Java. Интерфейс Map - ассоциативные массивы.
Java. Интерфейс Map - ассоциативные массивы.Java. Интерфейс Map - ассоциативные массивы.
Java. Интерфейс Map - ассоциативные массивы.Unguryan Vitaliy
 
Java. Интерфейс Set - наборы (множества) и его реализации.
Java. Интерфейс Set - наборы (множества) и его реализации.Java. Интерфейс Set - наборы (множества) и его реализации.
Java. Интерфейс Set - наборы (множества) и его реализации.Unguryan Vitaliy
 

Plus de Unguryan Vitaliy (15)

Модульное тестирование.
Модульное тестирование. Модульное тестирование.
Модульное тестирование.
 
Архитектурный шаблон MVC
Архитектурный шаблон MVCАрхитектурный шаблон MVC
Архитектурный шаблон MVC
 
Работа в команде, управление программными проектами
Работа в команде, управление программными проектамиРабота в команде, управление программными проектами
Работа в команде, управление программными проектами
 
Системы контроля версий
Системы контроля версийСистемы контроля версий
Системы контроля версий
 
Принципы SOLID
Принципы SOLIDПринципы SOLID
Принципы SOLID
 
Шаблоны проектирования GoF
Шаблоны проектирования GoFШаблоны проектирования GoF
Шаблоны проектирования GoF
 
Введение в hibernate
Введение в hibernateВведение в hibernate
Введение в hibernate
 
Spring AOP
Spring AOPSpring AOP
Spring AOP
 
Введение в Spring
Введение в SpringВведение в Spring
Введение в Spring
 
Cookies, session и другое в JSP
Cookies, session и другое в JSPCookies, session и другое в JSP
Cookies, session и другое в JSP
 
Java. Интерфейс Reference - типы ссылок
Java. Интерфейс Reference -  типы ссылокJava. Интерфейс Reference -  типы ссылок
Java. Интерфейс Reference - типы ссылок
 
Java. Интерфейс Queue - очередь
Java. Интерфейс Queue - очередьJava. Интерфейс Queue - очередь
Java. Интерфейс Queue - очередь
 
Java. Интерфейс Map - ассоциативные массивы.
Java. Интерфейс Map - ассоциативные массивы.Java. Интерфейс Map - ассоциативные массивы.
Java. Интерфейс Map - ассоциативные массивы.
 
Java. Интерфейс Set - наборы (множества) и его реализации.
Java. Интерфейс Set - наборы (множества) и его реализации.Java. Интерфейс Set - наборы (множества) и его реализации.
Java. Интерфейс Set - наборы (множества) и его реализации.
 
List - списки
List - списки List - списки
List - списки
 

java 8

  • 2. Методы интерфейсов по умолчанию Java 8 позволяет вам добавлять не абстрактные реализации методов в интерфейс, используя ключевое слово default. Эта новшество также известно, как метод расширения.
  • 3. Лямбда - выражения Лямбда - выражение представляет собой блок кода, который можно передать в другое место, поэтому он может быть выполнен позже, один или несколько раз.
  • 4. Лямбда - выражения Синтаксис (список параметров) -> исполняемый код; (String firstStr, String secondStr) -> { if (firstStr.length() < secondStr.length()) return -1; else if (firstStr.length() > secondStr.length()) return 1; else return 0; }
  • 5. Лямбда - выражения Если лямбда-выражение не имеет параметров, вы все равно необходимо ставить пустые скобки. () -> { for (int i = 0; i < 1000; i++) doWork(); }
  • 6. Функциональные интерфейсы Каждой лямбде соответствует тип, представленный интерфейсом. Так называемый функциональный интерфейс должен содержать ровно один абстрактный метод. Каждое лямбда-выражение этого типа будет сопоставлено объявленному методу.
  • 7. Ссылки на методы и конструкторы Java 8 позволяет вам передавать ссылки на методы или конструкторы. Для этого нужно использовать оператор ::
  • 8. Области действия лямбд Доступ к переменным внешней области действия из лямбда-выражения очень схож к доступу из анонимных классов. Вы можете ссылаться на переменные, объявленные как final, на экземплярные поля класса и статические переменные.
  • 9. Доступ к методам интерфейсов по умолчанию Внутри лямбда-выражений запрещено обращаться к методам по умолчанию. Следующий код не скомпилируется: Formula formula = (a) -> sqrt( a * 100);
  • 10. Встроенные функциональные интерфейсы В JDK 1.8 содержит множество встроенных функциональных интерфейсов. Некоторые из них хорошо известны по предыдущим версиям языка, например, Comparator или Runnable. Все эти интерфейсы были поддержаны в лямбдах добавлением аннотации @FunctionalInterface.
  • 11. Встроенные функциональные интерфейсы Однако в Java 8 также появилось много новых функциональных интерфейсов.
  • 12. Предикаты Предикаты — это функции, принимающие один аргумент, и возвращающие значение типа boolean. Интерфейс содержит различные методы по умолчанию, позволяющие строить сложные условия (and, or, negate).
  • 13. Функции Функции принимают один аргумент и возвращают некоторый результат. Методы по умолчанию могут использоваться для построения цепочек вызовов (compose, andThen).
  • 14. Поставщики Поставщики (suppliers) предоставляют результат заданного типа. В отличии от функций, поставщики не принимают аргументов.
  • 15. Потребители Потребители (consumers) представляют собой операции, которые производятся на одним входным аргументом.
  • 16. Компараторы Компараторы хорошо известны по предыдущим версиям Java. Java 8 добавляет в интерфейс различные методы по умолчанию.
  • 17. Опциональные значения Опциональные значения (optionals) не являются функциональными интерфейсами, однако являются удобным средством предотвращения NullPointerException.
  • 18. Опциональные значения Опциональные значение — это по сути контейнер для значения, которое может быть равно null. Например, вам нужен метод, который возвращает какое-то значение, но иногда он должен возвращать пустое значение. Вместо того, чтобы возвращать null, в Java 8 вы можете вернуть опциональное значение.
  • 19. Потоки Тип java.util.Stream представляет собой последовательность элементов, над которой можно производить различные операции. Операции над потоками бывают или промежуточными (intermediate) или конечными (terminal). параллельно.
  • 20. Потоки Конечные операции возвращают результат определённого типа, а промежуточные операции возвращают тот же поток. Таким образом вы можете строить цепочки из несколько операций над одним и тем же потоком.
  • 21. Потоки Поток создаются на основе источников, например типов, реализующих java.util.Collection, такие как списки или множества (ассоциативные массивы не поддерживаются). Операции над потоками могут выполняться как последовательно, так и параллельно.
  • 22. Filter Операция Filter принимает предикат, который фильтрует все элементы потока. Эта операция является промежуточной, т.е. позволяет нам вызвать другую операцию (например, forEach) над результатом. ForEach принимает функцию, которая вызывается для каждого элемента в (уже отфильтрованном) поток.
  • 23. Sorted Операция Sorted является промежуточной операцией, которая возвращает отсортированное представление потока. Элементы сортируются в обычном порядке, если вы не предоставили свой компаратор. Помните, что sorted создаёт всего лишь отсортированное представление и не влияет на порядок элементов в исходной коллекции.
  • 24. Map Промежуточная операция map преобразовывает каждый элемент в другой объект при помощи переданной функции.
  • 25. Match Для проверки, удовлетворяет ли поток заданному предикату, используются различные операции сопоставления (match). Все операции сопоставления являются конечными и возвращают результат типа boolean.
  • 26. Count Операция Count является конечной операцией и возвращает количество элементов в потоке. Типом возвращаемого значения является long.
  • 27. Reduce Эта конечная операция производит свертку элементов потока по заданной функции. Результатом является опциональное значение.
  • 28. Параллельные потоки Эта конечная операция производит свертку элементов потока по заданной функции. Результатом является опциональное значение.