Метод findFirst
Метод findFirst возвращает первый элемент потока
в виде контейнера Optional. Если поток пуст,
возвращается пустой Optional. Метод не принимает
параметров и является терминальной операцией, то есть
завершает обработку потока. Для последовательных потоков
он возвращает именно первый элемент, а для параллельных -
элемент, который оказался первым с точки зрения порядка
обработки.
Синтаксис
Optional<T> findFirst()
Пример
Давайте найдем первый элемент потока из чисел:
import java.util.List;
import java.util.Optional;
public class Main
{
public static void main(String[] args)
{
List<Integer> list = List.of(1, 2, 3, 4, 5);
Optional<Integer> res = list.stream().findFirst();
System.out.println(res.get());
}
}
Результат выполнения кода:
1
Пример
Давайте найдем первый элемент потока из строк:
import java.util.List;
import java.util.Optional;
public class Main
{
public static void main(String[] args)
{
List<String> list = List.of("abcde", "12345");
Optional<String> res = list.stream().findFirst();
System.out.println(res.get());
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте применим метод findFirst к пустому потоку:
import java.util.stream.Stream;
import java.util.Optional;
public class Main
{
public static void main(String[] args)
{
Optional<Integer> res = Stream.<Integer>empty().findFirst();
System.out.println(res.isEmpty());
}
}
Результат выполнения кода:
true
Пример
Давайте найдем первый четный элемент потока после фильтрации:
import java.util.List;
import java.util.Optional;
public class Main
{
public static void main(String[] args)
{
List<Integer> list = List.of(1, 3, 4, 6, 7);
Optional<Integer> res = list.stream()
.filter(n -> n % 2 == 0)
.findFirst();
System.out.println(res.get());
}
}
Результат выполнения кода:
4