Метод stream
Метод stream класса Optional преобразует
объект Optional в поток Stream.
Если значение в Optional присутствует,
поток будет содержать один элемент с этим значением.
Если Optional пуст, поток будет пустым
(содержать ноль элементов). Метод не принимает параметров
и возвращает объект типа Stream.
Синтаксис
optional.stream()
Пример
Давайте создадим непустой Optional и преобразуем его
в поток, а затем выведем все элементы потока:
import java.util.Optional;
import java.util.stream.Stream;
public class Main
{
public static void main(String[] args)
{
Optional<String> opt = Optional.of("abcde");
Stream<String> stream = opt.stream();
stream.forEach(System.out::println);
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте создадим пустой Optional и преобразуем его
в поток - в результате поток не будет содержать элементов:
import java.util.Optional;
import java.util.stream.Stream;
public class Main
{
public static void main(String[] args)
{
Optional<String> opt = Optional.empty();
Stream<String> stream = opt.stream();
System.out.println(stream.count());
}
}
Результат выполнения кода:
0
Пример
Давайте используем метод stream вместе с методом
flatMap для разворачивания списка объектов
Optional в один общий поток:
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
public class Main
{
public static void main(String[] args)
{
List<Optional<String>> list = List.of(
Optional.of("abcde"),
Optional.empty(),
Optional.of("12345")
);
List<String> res = list.stream()
.flatMap(Optional::stream)
.collect(Collectors.toList());
System.out.println(res);
}
}
Результат выполнения кода:
["abcde", "12345"]