Predikaatti: Tietojen Suodatus
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öteparametrin 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, suoritetaan lambda-lausekkeessa number -> number % 2 == 0 määritelty logiikka, joka tarkistaa, onko luku jaollinen 2:lla ilman jäännöstä, mikä määrittää sen parillisuuden.
Tässä Predicate-rajapintaa käytetään tarkistamaan, onko annettu luku parillinen, ja test()-metodi soveltaa ehtoa.
Ehtojen yhdistäminen
Predicate mahdollistaa ehtojen yhdistämisen käyttämällä metodeja and(), or() ja negate(). Tämä mahdollistaa monimutkaisempien tarkistusten tekemisen. Käydään läpi joitakin esimerkkejä:
JA-ehto
Oletetaan, että täytyy tarkistaa, täyttääkö luku kaksi kriteeriä: sen tulee olla suurempi kuin 10 ja parillinen.
Tätä varten voidaan käyttää and()-metodia, aivan kuten Java-kielen && operaattoria, jotta molempien ehtojen tulee 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 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 tulee täyttää molemmat kriteerit, jotta tulos on true.
TAI-ehto
Oletetaan nyt, että täytyy tarkistaa, onko luku joko alle 5 tai yli 15.
Voit käyttää or()-metodia, aivan kuten ||-operaattoria Javassa, 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äänteinen 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
Awesome!
Completion rate improved to 2.33
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öteparametrin 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, suoritetaan lambda-lausekkeessa number -> number % 2 == 0 määritelty logiikka, joka tarkistaa, onko luku jaollinen 2:lla ilman jäännöstä, mikä määrittää sen parillisuuden.
Tässä Predicate-rajapintaa käytetään tarkistamaan, onko annettu luku parillinen, ja test()-metodi soveltaa ehtoa.
Ehtojen yhdistäminen
Predicate mahdollistaa ehtojen yhdistämisen käyttämällä metodeja and(), or() ja negate(). Tämä mahdollistaa monimutkaisempien tarkistusten tekemisen. Käydään läpi joitakin esimerkkejä:
JA-ehto
Oletetaan, että täytyy tarkistaa, täyttääkö luku kaksi kriteeriä: sen tulee olla suurempi kuin 10 ja parillinen.
Tätä varten voidaan käyttää and()-metodia, aivan kuten Java-kielen && operaattoria, jotta molempien ehtojen tulee 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 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 tulee täyttää molemmat kriteerit, jotta tulos on true.
TAI-ehto
Oletetaan nyt, että täytyy tarkistaa, onko luku joko alle 5 tai yli 15.
Voit käyttää or()-metodia, aivan kuten ||-operaattoria Javassa, 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äänteinen versio palauttaa false, ja päinvastoin.
1. Mikä on Predicate-funktionaalisen rajapinnan ensisijainen tarkoitus Javassa?
2. Mikä on seuraavan koodin tuloste?
Kiitos palautteestasi!