Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Отримання Елементів зі Стріму за Допомогою findFirst() та findAny() | Термінальні Операції у Stream API
Quizzes & Challenges
Quizzes
Challenges
/
Stream API

bookОтримання Елементів зі Стріму за Допомогою findFirst() та findAny()

У Stream API також можна отримати лише один відповідний елемент з усього потоку.

Наприклад, в інтернет-магазині можна шукати перший товар зі знижкою або будь-який товар у наявності. У таких випадках методи findFirst та findAny є корисними, оскільки дозволяють швидко отримати елемент з потоку даних.

Метод findFirst()

Метод findFirst() використовується для отримання першого елемента у потоці. Це особливо корисно, коли порядок елементів має значення, наприклад, при роботі з упорядкованим потоком.

Optional<T> findFirst();

Цей метод повертає Optional<T>, тобто елемент може бути знайдений, а може й ні.

Приклад використання

В інтернет-магазині потрібно знайти перший товар зі знижкою та вивести його назву:

Main.java

Main.java

copy
12345678910111213141516171819202122232425262728293031323334353637383940
package com.example; import java.util.List; import java.util.Optional; import java.util.Arrays; public class Main { public static void main(String[] args) { List<Product> products = Arrays.asList( new Product("Laptop", false), new Product("Smartphone", true), new Product("Tablet", true) ); Optional<Product> discountedProduct = products.parallelStream() .filter(Product::hasDiscount) .findFirst(); discountedProduct.ifPresent(product -> System.out.println("Discounted product: " + product.getName())); } } class Product { private String name; private boolean discount; public Product(String name, boolean discount) { this.name = name; this.discount = discount; } public boolean hasDiscount() { return discount; } public String getName() { return name; } }

Код створює список об'єктів Product, кожен з яких має поле discount. Метод filter(Product::hasDiscount) обирає лише товари зі знижкою, а findFirst() отримує перший з них. Якщо товар знайдено, виводиться його назва.

Метод findAny()

Метод findAny() отримує будь-який елемент зі стріму. Особливо корисний при паралельній обробці, оскільки може повернути перший доступний елемент, що іноді швидше за findFirst().

Optional<T> findAny();

Як і findFirst(), цей метод повертає Optional<T>, що допомагає уникнути проблем із null.

Приклад використання

Знайдемо будь-який доступний продукт і виведемо його назву:

Main.java

Main.java

copy
123456789101112131415161718192021222324252627282930313233343536373839404142
package com.example; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.stream.Stream; public class Main { public static void main(String[] args) { List<Product> products = Arrays.asList( new Product("Laptop", false), new Product("Smartphone", true), new Product("Tablet", true) ); Optional<Product> availableProduct = products.parallelStream() .filter(Product::hasDiscount) .findAny(); availableProduct.ifPresent(product -> System.out.println("Product found: " + product.getName())); } } class Product { private String name; private boolean discount; public Product(String name, boolean discount) { this.name = name; this.discount = discount; } public boolean hasDiscount() { return discount; } public String getName() { return name; } }

Цей код створює список products, що містить об'єкти Product з полем discount. Метод filter(Product::hasDiscount) відбирає лише товари зі знижкою, а findAny() вибирає випадковий. Якщо товар знайдено, виводиться його назва.

1. Що повертає метод findFirst() у Stream API?

2. Яка основна різниця між findAny() та findFirst()?

3. Який метод є кращим за продуктивністю у паралельних потоках?

question mark

Що повертає метод findFirst() у Stream API?

Select the correct answer

question mark

Яка основна різниця між findAny() та findFirst()?

Select the correct answer

question mark

Який метод є кращим за продуктивністю у паралельних потоках?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 10

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Awesome!

Completion rate improved to 2.33

bookОтримання Елементів зі Стріму за Допомогою findFirst() та findAny()

Свайпніть щоб показати меню

У Stream API також можна отримати лише один відповідний елемент з усього потоку.

Наприклад, в інтернет-магазині можна шукати перший товар зі знижкою або будь-який товар у наявності. У таких випадках методи findFirst та findAny є корисними, оскільки дозволяють швидко отримати елемент з потоку даних.

Метод findFirst()

Метод findFirst() використовується для отримання першого елемента у потоці. Це особливо корисно, коли порядок елементів має значення, наприклад, при роботі з упорядкованим потоком.

Optional<T> findFirst();

Цей метод повертає Optional<T>, тобто елемент може бути знайдений, а може й ні.

Приклад використання

В інтернет-магазині потрібно знайти перший товар зі знижкою та вивести його назву:

Main.java

Main.java

copy
12345678910111213141516171819202122232425262728293031323334353637383940
package com.example; import java.util.List; import java.util.Optional; import java.util.Arrays; public class Main { public static void main(String[] args) { List<Product> products = Arrays.asList( new Product("Laptop", false), new Product("Smartphone", true), new Product("Tablet", true) ); Optional<Product> discountedProduct = products.parallelStream() .filter(Product::hasDiscount) .findFirst(); discountedProduct.ifPresent(product -> System.out.println("Discounted product: " + product.getName())); } } class Product { private String name; private boolean discount; public Product(String name, boolean discount) { this.name = name; this.discount = discount; } public boolean hasDiscount() { return discount; } public String getName() { return name; } }

Код створює список об'єктів Product, кожен з яких має поле discount. Метод filter(Product::hasDiscount) обирає лише товари зі знижкою, а findFirst() отримує перший з них. Якщо товар знайдено, виводиться його назва.

Метод findAny()

Метод findAny() отримує будь-який елемент зі стріму. Особливо корисний при паралельній обробці, оскільки може повернути перший доступний елемент, що іноді швидше за findFirst().

Optional<T> findAny();

Як і findFirst(), цей метод повертає Optional<T>, що допомагає уникнути проблем із null.

Приклад використання

Знайдемо будь-який доступний продукт і виведемо його назву:

Main.java

Main.java

copy
123456789101112131415161718192021222324252627282930313233343536373839404142
package com.example; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.stream.Stream; public class Main { public static void main(String[] args) { List<Product> products = Arrays.asList( new Product("Laptop", false), new Product("Smartphone", true), new Product("Tablet", true) ); Optional<Product> availableProduct = products.parallelStream() .filter(Product::hasDiscount) .findAny(); availableProduct.ifPresent(product -> System.out.println("Product found: " + product.getName())); } } class Product { private String name; private boolean discount; public Product(String name, boolean discount) { this.name = name; this.discount = discount; } public boolean hasDiscount() { return discount; } public String getName() { return name; } }

Цей код створює список products, що містить об'єкти Product з полем discount. Метод filter(Product::hasDiscount) відбирає лише товари зі знижкою, а findAny() вибирає випадковий. Якщо товар знайдено, виводиться його назва.

1. Що повертає метод findFirst() у Stream API?

2. Яка основна різниця між findAny() та findFirst()?

3. Який метод є кращим за продуктивністю у паралельних потоках?

question mark

Що повертає метод findFirst() у Stream API?

Select the correct answer

question mark

Яка основна різниця між findAny() та findFirst()?

Select the correct answer

question mark

Який метод є кращим за продуктивністю у паралельних потоках?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 10
some-alt