Predikaatti: Tietojen Suodatus
Pyyhkäise näyttääksesi valikon
Predicate-rajapinnan ensisijainen tarkoitus on mahdollistaa kätevä datan suodatus annetun ehdon perusteella. Tämä funktionaalinen rajapinta sisältää yhden abstraktin metodin:
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
}
Lisäksi se tarjoaa oletusmetodeja ehtojen yhdistämiseen, kuten and(), or() ja negate(), joita käsitellään myöhemmin.
Käytännön sovellus
Kaikkien funktionaalisten rajapintojen syntaksi noudattaa samanlaista kaavaa ja on varsin yksinkertainen:
Predicate<T> predicate = t -> condition;
Tässä T edustaa syöteargumentin tyyppiä, ja condition on lauseke, joka palauttaa joko true tai false.
Oletetaan, että täytyy tarkistaa, onko annettu luku parillinen. Tätä varten voidaan käyttää Predicate-rajapintaa seuraavasti:
Main.java
1234567891011121314151617package com.example; import java.util.function.Predicate; public class Main { public static void main(String[] args) { // Condition: Check if a number is even Predicate<Integer> isEven = number -> number % 2 == 0; int number = 4; if (isEven.test(number)) { System.out.println(number + " is an even number."); } else { System.out.println(number + " is an odd number."); } } }
Tämä koodi käyttää test()-rajapinnan Predicate-metodia, joka on tarkoitettu ehtojen arviointiin. Kun test() kutsutaan, se suorittaa lambda-lausekkeessa number -> number % 2 == 0 määritellyn logiikan, tarkistaen, onko luku jaollinen 2:lla ilman jäännöstä, mikä määrittää luvun parillisuuden.
Tässä Predicate-rajapintaa käytetään tarkistamaan, onko annettu luku parillinen, ja test()-metodi soveltaa tätä ehtoa.
Ehtojen yhdistäminen
Predicate mahdollistaa ehtojen yhdistämisen metodeilla and(), or() ja negate(). Tämä mahdollistaa monimutkaisemmat tarkistukset. Käydään läpi joitakin esimerkkejä:
JA-ehto
Oletetaan, että täytyy tarkistaa, täyttääkö luku kaksi kriteeriä: sen on oltava suurempi kuin 10 ja parillinen.
Tätä varten voidaan käyttää and()-metodia, aivan kuten Java-kielen && operaattoria, jotta varmistetaan, että molempien ehtojen on palautettava true.
Main.java
1234567891011121314151617181920212223package com.example; import java.util.function.Predicate; public class Main { public static void main(String[] args) { // Condition 1: The number is greater than 10 Predicate<Integer> isGreaterThanTen = number -> number > 10; // Condition 2: The number is even Predicate<Integer> isEven = number -> number % 2 == 0; // Combined condition: The number is greater than 10 and even Predicate<Integer> combinedCondition = isGreaterThanTen.and(isEven); int number = 12; if (combinedCondition.test(number)) { System.out.println(number + " meets both conditions."); } else { System.out.println(number + " does not meet the conditions."); } } }
and()-metodi yhdistää kaksi ehtoa. Luvun on täytettävä molemmat kriteerit, jotta tulos on true.
OR-ehto
Oletetaan nyt, että sinun täytyy tarkistaa, onko luku joko alle 5 tai yli 15.
Voit käyttää or()-metodia, aivan kuten Java-kielen ||-operaattoria, varmistaaksesi, että vähintään yksi ehdoista palauttaa true.
Main.java
1234567891011121314151617181920212223package com.example; import java.util.function.Predicate; public class Main { public static void main(String[] args) { // Condition 1: The number is less than 5 Predicate<Integer> isLessThanFive = number -> number < 5; // Condition 2: The number is greater than 15 Predicate<Integer> isGreaterThanFifteen = number -> number > 15; // Combined condition: The number is less than 5 or greater than 15 Predicate<Integer> combinedCondition = isLessThanFive.or(isGreaterThanFifteen); int number = 3; if (combinedCondition.test(number)) { System.out.println(number + " meets at least one of the conditions."); } else { System.out.println(number + " does not meet any of the conditions."); } } }
or()-metodi tarkistaa, täyttääkö luku vähintään yhden annetuista ehdoista. Tämä on hyödyllistä, kun riittää, että vain yksi kriteeri täyttyy.
NEGATE-ehto
Oletetaan, että täytyy tarkistaa, onko merkkijono ei tyhjä.
Voit käyttää negate()-metodia, aivan kuten Java:n ! operaattoria, kääntääksesi ehdon tuloksen.
Main.java
1234567891011121314151617181920package com.example; import java.util.function.Predicate; public class Main { public static void main(String[] args) { // Condition: The string is empty Predicate<String> isEmpty = str -> str == null || str.isEmpty(); // Condition: The string is not empty Predicate<String> isNotEmpty = isEmpty.negate(); String text = "Hello"; if (isNotEmpty.test(text)) { System.out.println("The string contains text: " + text); } else { System.out.println("The string is empty."); } } }
negate()-metodi kääntää ehdon. Jos alkuperäinen ehto palauttaa true, käännetty versio palauttaa false, ja päinvastoin.
1. Mikä on Predicate-funktionaalisen rajapinnan ensisijainen tarkoitus Javassa?
2. Mikä on seuraavan koodin tuloste?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme