Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Predikat: Datafiltrering | Grundlæggende og Funktionelle Kapaciteter af Stream API
Stream API

bookPredikat: 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

Main.java

copy
1234567891011121314151617
package 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

Main.java

copy
1234567891011121314151617181920212223
package 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

Main.java

copy
1234567891011121314151617181920212223
package 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

Main.java

copy
1234567891011121314151617181920
package 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?

question mark

Hvad er det primære formål med det funktionelle interface Predicate i Java?

Select the correct answer

question mark

Hvad vil output være for følgende kode?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 4

Spørg AI

expand

Spørg AI

ChatGPT

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

bookPredikat: 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

Main.java

copy
1234567891011121314151617
package 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

Main.java

copy
1234567891011121314151617181920212223
package 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

Main.java

copy
1234567891011121314151617181920212223
package 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

Main.java

copy
1234567891011121314151617181920
package 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?

question mark

Hvad er det primære formål med det funktionelle interface Predicate i Java?

Select the correct answer

question mark

Hvad vil output være for følgende kode?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 4
some-alt