Predikat: Datafiltrering
Hovedformålet med Predicate er å muliggjøre praktisk datafiltrering basert på en gitt betingelse. Dette funksjonelle grensesnittet inneholder én abstrakt metode:
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
}
I tillegg tilbyr det standardmetoder for å kombinere betingelser, som and(), or() og negate(), som vi vil gå gjennom senere.
Praktisk bruk
Syntaksen for alle funksjonelle grensesnitt følger et lignende mønster og er ganske enkel:
Predicate<T> predicate = t -> condition;
Her representerer T typen til input-argumentet, og condition er et uttrykk som returnerer enten true eller false.
La oss si at du må sjekke om et gitt tall er partall. Du kan bruke en Predicate til dette slik:
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."); } } }
Denne koden bruker test()-metoden fra Predicate-grensesnittet, som er utviklet for evaluering av betingelser. Når test() kalles, utføres logikken definert i lambda-uttrykket number -> number % 2 == 0, som sjekker om tallet er delelig med 2 uten rest, noe som avgjør om det er et partall.
Her brukes Predicate for å verifisere om et gitt tall er partall, og test()-metoden anvender betingelsen.
Kombinering av betingelser
Predicate gir mulighet til å kombinere betingelser ved hjelp av metodene and(), or() og negate(). Dette muliggjør mer komplekse kontroller. Her følger noen eksempler:
OG-betingelse
Anta at det er nødvendig å kontrollere om et tall oppfyller to kriterier: det må være større enn 10 og partall.
Metoden and() kan brukes til dette, på samme måte som operatoren && i Java, for å sikre at begge betingelsene må returnere 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."); } } }
Metoden and() kombinerer to betingelser. Et tall må oppfylle begge kriteriene for at resultatet skal være true.
OR-betingelse
Anta nå at du må sjekke om et tall enten er mindre enn 5 eller større enn 15.
Du kan bruke metoden or(), på samme måte som operatoren || i Java, for å sikre at minst én av betingelsene returnerer 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."); } } }
Metoden or() sjekker om et tall oppfyller minst én av de angitte betingelsene. Dette er nyttig når det er tilstrekkelig å oppfylle bare ett kriterium.
NEGATE-betingelse
Anta at du må sjekke om en streng ikke er tom.
Du kan bruke negate()-metoden, på samme måte som operatoren ! i Java, for å reversere resultatet av en betingelse.
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."); } } }
Metoden negate() reverserer en betingelse. Hvis opprinnelig betingelse returnerer true, vil den negaterte versjonen returnere false, og omvendt.
1. Hva er hovedformålet med det funksjonelle grensesnittet Predicate i Java?
2. Hva vil være output for følgende kode?
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Can you show an example of using Predicate with numbers?
How do I combine multiple Predicate conditions?
What does the test() method do in practice?
Awesome!
Completion rate improved to 2.33
Predikat: Datafiltrering
Sveip for å vise menyen
Hovedformålet med Predicate er å muliggjøre praktisk datafiltrering basert på en gitt betingelse. Dette funksjonelle grensesnittet inneholder én abstrakt metode:
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
}
I tillegg tilbyr det standardmetoder for å kombinere betingelser, som and(), or() og negate(), som vi vil gå gjennom senere.
Praktisk bruk
Syntaksen for alle funksjonelle grensesnitt følger et lignende mønster og er ganske enkel:
Predicate<T> predicate = t -> condition;
Her representerer T typen til input-argumentet, og condition er et uttrykk som returnerer enten true eller false.
La oss si at du må sjekke om et gitt tall er partall. Du kan bruke en Predicate til dette slik:
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."); } } }
Denne koden bruker test()-metoden fra Predicate-grensesnittet, som er utviklet for evaluering av betingelser. Når test() kalles, utføres logikken definert i lambda-uttrykket number -> number % 2 == 0, som sjekker om tallet er delelig med 2 uten rest, noe som avgjør om det er et partall.
Her brukes Predicate for å verifisere om et gitt tall er partall, og test()-metoden anvender betingelsen.
Kombinering av betingelser
Predicate gir mulighet til å kombinere betingelser ved hjelp av metodene and(), or() og negate(). Dette muliggjør mer komplekse kontroller. Her følger noen eksempler:
OG-betingelse
Anta at det er nødvendig å kontrollere om et tall oppfyller to kriterier: det må være større enn 10 og partall.
Metoden and() kan brukes til dette, på samme måte som operatoren && i Java, for å sikre at begge betingelsene må returnere 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."); } } }
Metoden and() kombinerer to betingelser. Et tall må oppfylle begge kriteriene for at resultatet skal være true.
OR-betingelse
Anta nå at du må sjekke om et tall enten er mindre enn 5 eller større enn 15.
Du kan bruke metoden or(), på samme måte som operatoren || i Java, for å sikre at minst én av betingelsene returnerer 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."); } } }
Metoden or() sjekker om et tall oppfyller minst én av de angitte betingelsene. Dette er nyttig når det er tilstrekkelig å oppfylle bare ett kriterium.
NEGATE-betingelse
Anta at du må sjekke om en streng ikke er tom.
Du kan bruke negate()-metoden, på samme måte som operatoren ! i Java, for å reversere resultatet av en betingelse.
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."); } } }
Metoden negate() reverserer en betingelse. Hvis opprinnelig betingelse returnerer true, vil den negaterte versjonen returnere false, og omvendt.
1. Hva er hovedformålet med det funksjonelle grensesnittet Predicate i Java?
2. Hva vil være output for følgende kode?
Takk for tilbakemeldingene dine!