Kontrol af Streamelementer Mod en Betingelse med allMatch()
Stryg for at vise menuen
Når du arbejder med datastreams, er det ofte nødvendigt at kontrollere, om elementer opfylder bestemte betingelser. For eksempel kan du have behov for at verificere, at alle varer i en indkøbskurv er på lager, at mindst én vare er nedsat, eller at der ikke er annullerede ordrer.
For at håndtere disse tilfælde tilbyder Stream API tre nyttige metoder: allMatch(), anyMatch() og noneMatch(). Disse metoder gør det muligt hurtigt at kontrollere, om elementer i en stream opfylder et givet predikat.
allMatch()-metoden
Metoden allMatch() kontrollerer, om alle elementer i en stream opfylder et givet predikat. Hvis mindst ét element ikke opfylder betingelsen, returnerer metoden false.
boolean allMatch(Predicate<? super T> predicate)
Denne metode tager en prædikat—en funktion, der returnerer en boolean—og anvender den på hvert element i streamen. Hvis alle elementer opfylder betingelsen, returnerer den true; ellers returnerer den false.
Praktisk eksempel
I en onlinebutik er der gratis fragt, hvis alle varer i kurven koster mere end $10. Du skal kontrollere, om gratis fragt gælder for den aktuelle ordre.
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."); } } }
I denne kode oprettes en liste af varepriser: [15, 20, 12, 9]. Metoden allMatch(price -> price > 10) kontrollerer, om alle varer koster mere end $10. Hvis de gør, vises en besked om vellykket gratis levering; ellers vises en besked om, at ikke alle varer opfylder betingelsen.
anyMatch() Metode
Metoden anyMatch() kontrollerer, om mindst ét element i en stream opfylder en given betingelse. Hvis mindst ét element opfylder betingelsen, returnerer metoden true og stopper behandlingen.
boolean anyMatch(Predicate<? super T> predicate)
Denne metode tager en prædikat og anvender den på hvert element i streamen. Så snart den finder et matchende element, returnerer den true og stopper udførelsen.
Praktisk eksempel
En onlinebutik tilbyder et VIP-program, hvis mindst ét element i kurven koster mere end $500. Du skal kontrollere, om kunden kvalificerer sig til VIP-status.
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."); } } }
Her kontrollerer metoden anyMatch(price -> price > 500), om der er mindst ét element, der koster over $500. Hvis det findes, bliver hasExpensiveItem sat til true, og en besked om kvalificering til VIP-status udskrives; ellers vises en besked om, at der ikke er nogen dyre varer i kurven.
noneMatch()-metoden
Metoden noneMatch() kontrollerer, om ingen af elementerne i en stream opfylder en given prædikat. Hvis ingen elementer matcher betingelsen, returnerer metoden true.
boolean noneMatch(Predicate<? super T> predicate)
Denne metode tager et predikat og anvender det på hvert element i strømmen. Hvis ingen elementer opfylder betingelsen, returnerer den true; ellers returnerer den false.
Praktisk eksempel
En onlinebutik tillader ikke varer med en pris under nul. Du skal kontrollere, om der er sådanne varer i kurven.
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."); } } }
I dette eksempel kontrollerer noneMatch(price -> price < 0), om der ikke er nogen varer, der er prissat under $0. Hvis alle varer har en gyldig pris, udskrives en besked, der bekræfter dette; ellers vises en besked, der angiver tilstedeværelsen af en vare med en ugyldig pris.
1. Hvilken metode kontrollerer, om mindst ét element i streamen opfylder en betingelse?
2. Hvilken metode bør anvendes for at sikre, at der ikke er nogen værdier mindre end nul i en liste?
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat