Virran Alkioiden Tarkistaminen Ehtoa Vastaan AllMatch()-Metodilla
Työskennellessäsi datavirtojen kanssa, on usein tarpeen tarkistaa, täyttävätkö alkiot tietyt ehdot. Esimerkiksi saatat haluta varmistaa, että kaikki ostoskorin tuotteet ovat varastossa, että vähintään yksi tuote on alennuksessa, tai ettei ole peruutettuja tilauksia.
Näiden tilanteiden käsittelemiseksi Stream API tarjoaa kolme hyödyllistä metodia: allMatch(), anyMatch() ja noneMatch(). Näiden avulla voit nopeasti tarkistaa, täyttävätkö virran alkiot annetun predikaatin.
allMatch()-metodi
Metodi allMatch() tarkistaa, täyttävätkö kaikki virran alkiot annetun predikaatin. Jos yksikin alkio ei täytä ehtoa, metodi palauttaa false.
boolean allMatch(Predicate<? super T> predicate)
Tämä metodi ottaa vastaan predikaatin—funktion, joka palauttaa boolean-arvon—ja soveltaa sitä jokaiseen virran alkioon. Jos kaikki alkiot täyttävät ehdon, palautetaan true; muussa tapauksessa palautetaan false.
Käytännön esimerkki
Verkkokaupassa ilmainen toimitus on saatavilla, jos kaikki ostoskorin tuotteet maksavat yli $10. On tarkistettava, koskeeko ilmainen toimitus nykyistä tilausta.
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."); } } }
Tässä koodissa luodaan lista tuotteiden hinnoista: [15, 20, 12, 9]. Metodi allMatch(price -> price > 10) tarkistaa, että kaikki tuotteet maksavat yli 10 $. Jos ehto täyttyy, näytetään viesti onnistuneesta ilmaisesta toimituksesta; muussa tapauksessa näytetään viesti, että kaikki tuotteet eivät täytä ehtoa.
anyMatch()-metodi
Metodi anyMatch() tarkistaa, täyttääkö vähintään yksi virran alkio annetun predikaatin. Jos vähintään yksi alkio täyttää ehdon, metodi palauttaa true ja lopettaa käsittelyn.
boolean anyMatch(Predicate<? super T> predicate)
Tämä metodi ottaa predikaatin ja soveltaa sitä jokaiseen virran alkioon. Heti kun se löytää ehdon täyttävän alkion, se palauttaa true ja lopettaa suorituksen.
Käytännön esimerkki
Verkkokauppa tarjoaa VIP-ohjelman, jos vähintään yksi tuote ostoskorissa maksaa yli $500. Sinun tulee tarkistaa, täyttääkö asiakas VIP-statuksen ehdot.
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."); } } }
Tässä menetelmä anyMatch(price -> price > 500) tarkistaa, onko olemassa vähintään yksi tuote, jonka hinta ylittää 500 $. Jos tällainen löytyy, hasExpensiveItem saa arvon true ja tulostetaan viesti VIP-statukseen oikeuttamisesta; muussa tapauksessa näytetään viesti, jossa ilmoitetaan, ettei ostoskori sisällä kalliita tuotteita.
noneMatch()-metodi
Metodi noneMatch() tarkistaa, ettei yksikään virran alkioista täytä annettua predikaattia. Jos mikään alkio ei täytä ehtoa, metodi palauttaa arvon true.
boolean noneMatch(Predicate<? super T> predicate)
Tämä metodi ottaa predikaatin ja soveltaa sitä jokaiseen alkioon virrassa. Jos mikään alkio ei täytä ehtoa, palautetaan true; muuten palautetaan false.
Käytännön esimerkki
Verkkokauppa ei salli tuotteita, joiden hinta on alle nolla. Sinun tulee tarkistaa, onko ostoskoriin lisätty tällaisia tuotteita.
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."); } } }
Tässä esimerkissä noneMatch(price -> price < 0) tarkistaa, ettei yksikään tuote ole hinnoiteltu alle $0. Jos kaikilla tuotteilla on kelvollinen hinta, tulostetaan viesti, joka vahvistaa tämän; muussa tapauksessa näytetään viesti, joka ilmoittaa tuotteen virheellisestä hinnasta.
1. Mikä metodi tarkistaa, täyttääkö vähintään yksi virran alkio ehdon?
2. Mitä metodia tulisi käyttää varmistaaksesi, ettei listassa ole arvoja, jotka ovat pienempiä kuin nolla?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Can you provide code examples for each of these methods?
What are some common use cases for allMatch(), anyMatch(), and noneMatch()?
How do these methods improve performance compared to manual iteration?
Awesome!
Completion rate improved to 2.33
Virran Alkioiden Tarkistaminen Ehtoa Vastaan AllMatch()-Metodilla
Pyyhkäise näyttääksesi valikon
Työskennellessäsi datavirtojen kanssa, on usein tarpeen tarkistaa, täyttävätkö alkiot tietyt ehdot. Esimerkiksi saatat haluta varmistaa, että kaikki ostoskorin tuotteet ovat varastossa, että vähintään yksi tuote on alennuksessa, tai ettei ole peruutettuja tilauksia.
Näiden tilanteiden käsittelemiseksi Stream API tarjoaa kolme hyödyllistä metodia: allMatch(), anyMatch() ja noneMatch(). Näiden avulla voit nopeasti tarkistaa, täyttävätkö virran alkiot annetun predikaatin.
allMatch()-metodi
Metodi allMatch() tarkistaa, täyttävätkö kaikki virran alkiot annetun predikaatin. Jos yksikin alkio ei täytä ehtoa, metodi palauttaa false.
boolean allMatch(Predicate<? super T> predicate)
Tämä metodi ottaa vastaan predikaatin—funktion, joka palauttaa boolean-arvon—ja soveltaa sitä jokaiseen virran alkioon. Jos kaikki alkiot täyttävät ehdon, palautetaan true; muussa tapauksessa palautetaan false.
Käytännön esimerkki
Verkkokaupassa ilmainen toimitus on saatavilla, jos kaikki ostoskorin tuotteet maksavat yli $10. On tarkistettava, koskeeko ilmainen toimitus nykyistä tilausta.
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."); } } }
Tässä koodissa luodaan lista tuotteiden hinnoista: [15, 20, 12, 9]. Metodi allMatch(price -> price > 10) tarkistaa, että kaikki tuotteet maksavat yli 10 $. Jos ehto täyttyy, näytetään viesti onnistuneesta ilmaisesta toimituksesta; muussa tapauksessa näytetään viesti, että kaikki tuotteet eivät täytä ehtoa.
anyMatch()-metodi
Metodi anyMatch() tarkistaa, täyttääkö vähintään yksi virran alkio annetun predikaatin. Jos vähintään yksi alkio täyttää ehdon, metodi palauttaa true ja lopettaa käsittelyn.
boolean anyMatch(Predicate<? super T> predicate)
Tämä metodi ottaa predikaatin ja soveltaa sitä jokaiseen virran alkioon. Heti kun se löytää ehdon täyttävän alkion, se palauttaa true ja lopettaa suorituksen.
Käytännön esimerkki
Verkkokauppa tarjoaa VIP-ohjelman, jos vähintään yksi tuote ostoskorissa maksaa yli $500. Sinun tulee tarkistaa, täyttääkö asiakas VIP-statuksen ehdot.
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."); } } }
Tässä menetelmä anyMatch(price -> price > 500) tarkistaa, onko olemassa vähintään yksi tuote, jonka hinta ylittää 500 $. Jos tällainen löytyy, hasExpensiveItem saa arvon true ja tulostetaan viesti VIP-statukseen oikeuttamisesta; muussa tapauksessa näytetään viesti, jossa ilmoitetaan, ettei ostoskori sisällä kalliita tuotteita.
noneMatch()-metodi
Metodi noneMatch() tarkistaa, ettei yksikään virran alkioista täytä annettua predikaattia. Jos mikään alkio ei täytä ehtoa, metodi palauttaa arvon true.
boolean noneMatch(Predicate<? super T> predicate)
Tämä metodi ottaa predikaatin ja soveltaa sitä jokaiseen alkioon virrassa. Jos mikään alkio ei täytä ehtoa, palautetaan true; muuten palautetaan false.
Käytännön esimerkki
Verkkokauppa ei salli tuotteita, joiden hinta on alle nolla. Sinun tulee tarkistaa, onko ostoskoriin lisätty tällaisia tuotteita.
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."); } } }
Tässä esimerkissä noneMatch(price -> price < 0) tarkistaa, ettei yksikään tuote ole hinnoiteltu alle $0. Jos kaikilla tuotteilla on kelvollinen hinta, tulostetaan viesti, joka vahvistaa tämän; muussa tapauksessa näytetään viesti, joka ilmoittaa tuotteen virheellisestä hinnasta.
1. Mikä metodi tarkistaa, täyttääkö vähintään yksi virran alkio ehdon?
2. Mitä metodia tulisi käyttää varmistaaksesi, ettei listassa ole arvoja, jotka ovat pienempiä kuin nolla?
Kiitos palautteestasi!