Java 8 Stream find
Данная статья написана командой Vertex Academy. Это одна из статей из нашего Учебника по Java 8.
В этой статье мы рассмотрим поиск данных с помощью Stream-ов в Java 8
1. Введение
Stream API - новый способ взаимодействия с данными, представляя их в виде конечного потока данных.
Для поиска данных в Stream-е, необходимо использовать комбинации методов filter() и findAny() или findFirst()
2. Stream findAny
Метод findAny() возвращает первый попавшийся элемент из Stream-a, в виде обертки Optional.
Найдем любую строку
1 2 3 4 5 6 7 8 |
public static void main(String[] args) { List<String> strings = Arrays.asList("BLOB", "Java is the best", "Java 8", "Java 9", "Jacoco"); Optional<String> java = strings.stream() .findAny(); System.out.println(java); //output Optional[BLOB] } |
Теперь найдем любую строку, в которой есть слово "Java"
1 2 3 4 5 6 7 8 9 |
public static void main(String[] args) { List<String> strings = Arrays.asList("Java is the best", "Java 8", "Java 9", "Jacoco", "BLOB"); Optional<String> java = strings.stream() .filter(s -> s.contains("Java")) .findAny(); System.out.println(java); //output Optional[Java is the best] } |
Для обычных Stream-ов (последовательных) при нескольких запусках результат будет один и тот же. Для параллельных же - всегда разный
1 2 3 4 5 6 7 8 9 |
public static void main(String[] args) { List<String> strings = Arrays.asList("Java is the best", "Java 8", "Java 9", "Jacoco", "BLOB"); Optional<String> java = strings.parallelStream() .filter(s -> s.contains("Java")) .findAny(); System.out.println(java); //output Optional[Java 9] } |
3. Stream findFirst
Метод findFirst() возвращает первый элемент по порядку из Stream-a, в виде обертки Optional.
Найдем первое число
1 2 3 4 5 6 7 8 |
public static void main(String[] args) { List<Integer> numbers = Arrays.asList(1, 5, 8, 10, 12, 15); Optional<Integer> first = numbers.stream() .findFirst(); System.out.println(first); //output Optional[1] } |
Теперь найдем первое число, больше 10
1 2 3 4 5 6 7 8 9 |
public static void main(String[] args) { List<Integer> numbers = Arrays.asList(1, 5, 8, 10, 12, 15); Optional<Integer> first = numbers.stream() .filter(number -> number > 10) .findFirst(); System.out.println(first); //output Optional[12] } |
В данном случае для обычных Stream-ов (последовательных) и для параллельных при нескольких запусках результат будет один и тот же, т.к. возвращается именно первый элемент по порядку в Stream-e.
1 2 3 4 5 6 7 8 9 |
public static void main(String[] args) { List<Integer> numbers = Arrays.asList(1, 5, 8, 10, 12, 15); Optional<Integer> first = numbers.parallelStream() .filter(number -> number > 10) .findFirst(); System.out.println(first); //output Optional[12] } |
Надеемся, что наша статья была Вам полезна. Также есть возможность записаться на наши курсы по Java в Киеве. Детальную информацию Вы можете найти у нас на сайте.