Predikat: Datafiltrering
Det primære formål med Predicate er at muliggøre bekvem datafiltrering baseret på en given betingelse. Dette funktionelle interface indeholder en enkelt abstrakt metode:
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
}
Derudover tilbyder det standardmetoder til at kombinere betingelser, såsom and(), or() og negate(), som vi gennemgår senere.
Praktisk anvendelse
Syntaksen for alle funktionelle interfaces følger et lignende mønster og er ganske enkel:
Predicate<T> predicate = t -> condition;
Her repræsenterer T typen af inputargumentet, og condition er et udtryk, der returnerer enten true eller false.
Antag, at det er nødvendigt at kontrollere, om et givet tal er lige. Dette kan gøres med en Predicate som følger:
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 kode anvender test()-metoden fra Predicate-interfacet, som er designet til evaluering af betingelser. Når test() kaldes, udfører den logikken defineret i lambda-udtrykket number -> number % 2 == 0, hvor det kontrolleres, om tallet er deleligt med 2 uden en rest, hvilket afgør dets ligehed.
Her bruges Predicate til at verificere, om et givet tal er lige, og test()-metoden anvender betingelsen.
Kombinering af betingelser
Predicate muliggør kombinering af betingelser ved hjælp af metoderne and(), or() og negate(). Dette giver mulighed for mere komplekse kontroller. Her gennemgås nogle eksempler:
OG-betingelse
Antag, at du skal kontrollere, om et tal opfylder to kriterier: det skal være større end 10 og lige.
Du kan bruge metoden and() til dette, ligesom operatoren && i Java, for at sikre, at begge betingelser skal 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 tal skal opfylde begge kriterier for at resultatet bliver true.
OR-betingelse
Antag nu, at det er nødvendigt at kontrollere, om et tal enten er mindre end 5 eller større end 15.
or()-metoden kan anvendes, ligesom ||-operatoren i Java, for at sikre, at mindst én af betingelserne 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() kontrollerer, om et tal opfylder mindst én af de angivne betingelser. Dette er nyttigt, når det er tilstrækkeligt at opfylde blot ét kriterium.
NEGATE-betingelse
Antag, at det er nødvendigt at kontrollere, om en streng ikke er tom.
Metoden negate() kan anvendes, ligesom operatoren ! i Java, til at omvende resultatet af 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. Hvis den oprindelige betingelse returnerer true, vil den omvendte version returnere false, og omvendt.
1. Hvad er det primære formål med det funktionelle interface Predicate i Java?
2. Hvad vil output være for følgende kode?
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Awesome!
Completion rate improved to 2.33
Predikat: Datafiltrering
Stryg for at vise menuen
Det primære formål med Predicate er at muliggøre bekvem datafiltrering baseret på en given betingelse. Dette funktionelle interface indeholder en enkelt abstrakt metode:
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
}
Derudover tilbyder det standardmetoder til at kombinere betingelser, såsom and(), or() og negate(), som vi gennemgår senere.
Praktisk anvendelse
Syntaksen for alle funktionelle interfaces følger et lignende mønster og er ganske enkel:
Predicate<T> predicate = t -> condition;
Her repræsenterer T typen af inputargumentet, og condition er et udtryk, der returnerer enten true eller false.
Antag, at det er nødvendigt at kontrollere, om et givet tal er lige. Dette kan gøres med en Predicate som følger:
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 kode anvender test()-metoden fra Predicate-interfacet, som er designet til evaluering af betingelser. Når test() kaldes, udfører den logikken defineret i lambda-udtrykket number -> number % 2 == 0, hvor det kontrolleres, om tallet er deleligt med 2 uden en rest, hvilket afgør dets ligehed.
Her bruges Predicate til at verificere, om et givet tal er lige, og test()-metoden anvender betingelsen.
Kombinering af betingelser
Predicate muliggør kombinering af betingelser ved hjælp af metoderne and(), or() og negate(). Dette giver mulighed for mere komplekse kontroller. Her gennemgås nogle eksempler:
OG-betingelse
Antag, at du skal kontrollere, om et tal opfylder to kriterier: det skal være større end 10 og lige.
Du kan bruge metoden and() til dette, ligesom operatoren && i Java, for at sikre, at begge betingelser skal 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 tal skal opfylde begge kriterier for at resultatet bliver true.
OR-betingelse
Antag nu, at det er nødvendigt at kontrollere, om et tal enten er mindre end 5 eller større end 15.
or()-metoden kan anvendes, ligesom ||-operatoren i Java, for at sikre, at mindst én af betingelserne 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() kontrollerer, om et tal opfylder mindst én af de angivne betingelser. Dette er nyttigt, når det er tilstrækkeligt at opfylde blot ét kriterium.
NEGATE-betingelse
Antag, at det er nødvendigt at kontrollere, om en streng ikke er tom.
Metoden negate() kan anvendes, ligesom operatoren ! i Java, til at omvende resultatet af 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. Hvis den oprindelige betingelse returnerer true, vil den omvendte version returnere false, og omvendt.
1. Hvad er det primære formål med det funktionelle interface Predicate i Java?
2. Hvad vil output være for følgende kode?
Tak for dine kommentarer!