Перевірка Елементів Потоку на Відповідність Умові за Допомогою allMatch()
Свайпніть щоб показати меню
Під час роботи з потоками даних часто виникає потреба перевірити, чи відповідають елементи певним умовам. Наприклад, потрібно впевнитися, що всі товари у кошику є в наявності, що хоча б один товар має знижку або що немає скасованих замовлень.
Для таких випадків Stream API надає три корисні методи: allMatch(), anyMatch() та noneMatch(). Ці методи дозволяють швидко перевірити, чи задовольняють елементи потоку заданий предикат.
Метод allMatch()
Метод allMatch() перевіряє, чи всі елементи потоку задовольняють заданий предикат. Якщо хоча б один елемент не відповідає умові, метод повертає false.
boolean allMatch(Predicate<? super T> predicate)
Цей метод приймає предикат—функцію, яка повертає boolean—та застосовує його до кожного елемента потоку. Якщо всі елементи задовольняють умову, повертається true; інакше — false.
Практичний приклад
У інтернет-магазині безкоштовна доставка доступна, якщо всі товари у кошику коштують більше ніж $10. Необхідно перевірити, чи застосовується безкоштовна доставка до поточного замовлення.
Main.java
1234567891011121314151617package com.example; import java.util.List; public class Main { public static void main(String[] args) { List<Integer> prices = List.of(15, 20, 12, 9); // Item prices boolean freeShipping = prices.stream().allMatch(price -> price > 10); if (freeShipping) { System.out.println("Free shipping applied."); } else { System.out.println("Not all items qualify for free shipping."); } } }
У цьому коді створюється список цін товарів: [15, 20, 12, 9]. Метод allMatch(price -> price > 10) перевіряє, чи всі товари коштують більше $10. Якщо так, відображається повідомлення про успішне безкоштовне доставлення; інакше з'являється повідомлення про те, що не всі товари відповідають вимогам.
Метод anyMatch()
Метод anyMatch() перевіряє, чи хоча б один елемент у потоці задовольняє заданий предикат. Якщо хоча б один елемент відповідає умові, метод повертає true і припиняє обробку.
boolean anyMatch(Predicate<? super T> predicate)
Цей метод приймає предикат і застосовує його до кожного елемента у потоці. Як тільки знаходить відповідний елемент, повертає true і зупиняє виконання.
Практичний приклад
Інтернет-магазин пропонує VIP-програму, якщо хоча б один товар у кошику коштує більше ніж $500. Необхідно перевірити, чи клієнт має право на VIP-статус.
Main.java
1234567891011121314151617package com.example; import java.util.List; public class Main { public static void main(String[] args) { List<Integer> prices = List.of(530, 300, 40, 120); // Item prices boolean hasExpensiveItem = prices.stream().anyMatch(price -> price > 500); if (hasExpensiveItem) { System.out.println("Customer qualifies for VIP status."); } else { System.out.println("No expensive items in the cart."); } } }
Тут метод anyMatch(price -> price > 500) перевіряє, чи існує хоча б один товар з ціною понад $500. Якщо такий знайдено, hasExpensiveItem набуває значення true, і виводиться повідомлення про отримання VIP-статусу; інакше з'являється повідомлення про відсутність дорогих товарів у кошику.
Метод noneMatch()
Метод noneMatch() перевіряє, чи жоден з елементів у стрімі не задовольняє заданий предикат. Якщо жоден елемент не відповідає умові, метод повертає true.
boolean noneMatch(Predicate<? super T> predicate)
Цей метод приймає предикат і застосовує його до кожного елемента у потоці. Якщо жоден елемент не задовольняє умову, повертається true; інакше повертається false.
Практичний приклад
Інтернет-магазин не дозволяє товари з ціною нижче нуля. Необхідно перевірити, чи є такі товари у кошику.
Main.java
1234567891011121314151617package com.example; import java.util.List; public class Main { public static void main(String[] args) { List<Integer> prices = List.of(1500, 2000, 3000, 0); // Item prices boolean noFreeItems = prices.stream().noneMatch(price -> price < 0); if (noFreeItems) { System.out.println("All items have valid prices."); } else { System.out.println("The cart contains an item with a zero price."); } } }
У цьому прикладі noneMatch(price -> price < 0) перевіряє, чи немає елементів з ціною нижче $0. Якщо всі елементи мають коректну ціну, виводиться повідомлення з підтвердженням; інакше з'являється повідомлення про наявність елемента з некоректною ціною.
1. Який метод перевіряє, чи хоча б один елемент потоку задовольняє умову?
2. Який метод слід використовувати, щоб переконатися, що у списку немає значень менше нуля?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат