Метод findAny
Метод findAny класса Stream возвращает
значение типа Optional, содержащее любой
элемент потока. Если поток пуст, возвращается
пустой Optional. Метод не принимает
параметров. В отличие от findFirst, метод
findAny не гарантирует, что будет возвращён
именно первый элемент - в параллельных потоках
это позволяет добиться максимальной
производительности.
Синтаксис
Optional<T> findAny()
Пример
Давайте найдём любой элемент потока из
чисел 1, 2, 3, 4, 5:
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
public class Main
{
public static void main(String[] args)
{
Stream<Integer> stream = List.of(1, 2, 3, 4, 5).stream();
Optional<Integer> res = stream.findAny();
System.out.println(res.get());
}
}
Результат выполнения кода:
1
Пример
Давайте найдём любой элемент потока строк
"a", "b", "c", "d", "e"
и выведем его через orElse:
import java.util.List;
import java.util.stream.Stream;
public class Main
{
public static void main(String[] args)
{
Stream<String> stream = List.of("a", "b", "c", "d", "e").stream();
String res = stream.findAny().orElse("empty");
System.out.println(res);
}
}
Результат выполнения кода:
"a"
Пример
Если поток пуст, метод findAny вернёт
пустой Optional. Давайте проверим это:
import java.util.stream.Stream;
public class Main
{
public static void main(String[] args)
{
Stream<Integer> stream = Stream.empty();
String res = stream.findAny().isEmpty() ? "empty" : "not empty";
System.out.println(res);
}
}
Результат выполнения кода:
"empty"
Пример
Давайте применим filter перед findAny,
чтобы найти любой чётный элемент потока:
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
public class Main
{
public static void main(String[] args)
{
Stream<Integer> stream = List.of(1, 2, 3, 4, 5).stream();
Optional<Integer> res = stream.filter(n -> n % 2 == 0).findAny();
System.out.println(res.get());
}
}
Результат выполнения кода:
2