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 anvendelse
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.
Anta 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.
Kombinere betingelser
Predicate gir mulighet til å kombinere betingelser ved hjelp av metodene and(), or() og negate(). Dette muliggjør mer komplekse sjekker. Her er noen eksempler:
OG-betingelse
Anta at du må kontrollere om et tall oppfyller to kriterier: det må være større enn 10 og partall.
Du kan bruke and()-metoden for 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 bli 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 or()-metoden, 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 gitte betingelsene. Dette er nyttig når det er tilstrekkelig å oppfylle bare ett kriterium.
NEGERE betingelse
Anta at det er nødvendig å kontrollere om en streng ikke er tom.
Metoden negate() kan benyttes, på samme måte som operatoren ! i Java, for å omvende 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() omvender en betingelse. Dersom opprinnelig betingelse returnerer true, vil den negerte 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