Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Predikat: Datafiltrering | Grunder och Funktionella Möjligheter med Stream API
Stream API

bookPredikat: Datafiltrering

Det primära syftet med Predicate är att möjliggöra bekväm datafiltrering baserat på ett givet villkor. Detta funktionella gränssnitt innehåller en enda abstrakt metod:

@FunctionalInterface
public interface Predicate<T> {
    boolean test(T t);
}

Dessutom tillhandahåller det standardmetoder för att kombinera villkor, såsom and(), or() och negate(), vilka vi kommer att behandla senare.

Praktisk tillämpning

Syntaxen för alla funktionella gränssnitt följer ett liknande mönster och är ganska enkel:

Predicate<T> predicate = t -> condition;

Här representerar T typen av inmatningsargumentet, och condition är ett uttryck som returnerar antingen true eller false.

Antag att du behöver kontrollera om ett givet tal är jämnt. Du kan använda en Predicate för detta enligt följande:

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."); } } }

Denna kod använder metoden test() från gränssnittet Predicate, som är avsedd för utvärdering av villkor. När test() anropas, körs logiken som definierats i lambda-uttrycket number -> number % 2 == 0, vilket kontrollerar om talet är delbart med 2 utan rest, vilket avgör om det är jämnt.

Här används Predicate för att verifiera om ett givet tal är jämnt, och metoden test() tillämpar villkoret.

Kombinera villkor

Predicate erbjuder möjligheten att kombinera villkor med metoderna and(), or() och negate(). Detta möjliggör mer komplexa kontroller. Här följer några exempel:

OCH-villkor

Anta att du behöver kontrollera om ett tal uppfyller två kriterier: det måste vara större än 10 och jämnt.

Du kan använda metoden and() för detta, precis som operatorn && i Java, för att säkerställa att båda villkoren måste returnera 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() kombinerar två villkor. Ett tal måste uppfylla båda kriterierna för att resultatet ska bli true.

ELLER-villkor

Anta nu att det är nödvändigt att kontrollera om ett tal är antingen mindre än 5 eller större än 15.

Det är möjligt att använda metoden or(), på samma sätt som operatorn || i Java, för att säkerställa att minst ett av villkoren returnerar 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() kontrollerar om ett tal uppfyller minst ett av de angivna villkoren. Detta är användbart när det räcker att endast ett kriterium är uppfyllt.

NEGATE-villkor

Anta att du behöver kontrollera om en sträng inte är tom.

Du kan använda metoden negate(), precis som operatorn ! i Java, för att vända resultatet av ett villkor.

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() vänder ett villkor. Om det ursprungliga villkoret returnerar true, kommer den negativa versionen att returnera false, och tvärtom.

1. Vad är det primära syftet med det funktionella gränssnittet Predicate i Java?

2. Vad blir utdata av följande kod?

question mark

Vad är det primära syftet med det funktionella gränssnittet Predicate i Java?

Select the correct answer

question mark

Vad blir utdata av följande kod?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 1. Kapitel 4

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Awesome!

Completion rate improved to 2.33

bookPredikat: Datafiltrering

Svep för att visa menyn

Det primära syftet med Predicate är att möjliggöra bekväm datafiltrering baserat på ett givet villkor. Detta funktionella gränssnitt innehåller en enda abstrakt metod:

@FunctionalInterface
public interface Predicate<T> {
    boolean test(T t);
}

Dessutom tillhandahåller det standardmetoder för att kombinera villkor, såsom and(), or() och negate(), vilka vi kommer att behandla senare.

Praktisk tillämpning

Syntaxen för alla funktionella gränssnitt följer ett liknande mönster och är ganska enkel:

Predicate<T> predicate = t -> condition;

Här representerar T typen av inmatningsargumentet, och condition är ett uttryck som returnerar antingen true eller false.

Antag att du behöver kontrollera om ett givet tal är jämnt. Du kan använda en Predicate för detta enligt följande:

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."); } } }

Denna kod använder metoden test() från gränssnittet Predicate, som är avsedd för utvärdering av villkor. När test() anropas, körs logiken som definierats i lambda-uttrycket number -> number % 2 == 0, vilket kontrollerar om talet är delbart med 2 utan rest, vilket avgör om det är jämnt.

Här används Predicate för att verifiera om ett givet tal är jämnt, och metoden test() tillämpar villkoret.

Kombinera villkor

Predicate erbjuder möjligheten att kombinera villkor med metoderna and(), or() och negate(). Detta möjliggör mer komplexa kontroller. Här följer några exempel:

OCH-villkor

Anta att du behöver kontrollera om ett tal uppfyller två kriterier: det måste vara större än 10 och jämnt.

Du kan använda metoden and() för detta, precis som operatorn && i Java, för att säkerställa att båda villkoren måste returnera 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() kombinerar två villkor. Ett tal måste uppfylla båda kriterierna för att resultatet ska bli true.

ELLER-villkor

Anta nu att det är nödvändigt att kontrollera om ett tal är antingen mindre än 5 eller större än 15.

Det är möjligt att använda metoden or(), på samma sätt som operatorn || i Java, för att säkerställa att minst ett av villkoren returnerar 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() kontrollerar om ett tal uppfyller minst ett av de angivna villkoren. Detta är användbart när det räcker att endast ett kriterium är uppfyllt.

NEGATE-villkor

Anta att du behöver kontrollera om en sträng inte är tom.

Du kan använda metoden negate(), precis som operatorn ! i Java, för att vända resultatet av ett villkor.

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() vänder ett villkor. Om det ursprungliga villkoret returnerar true, kommer den negativa versionen att returnera false, och tvärtom.

1. Vad är det primära syftet med det funktionella gränssnittet Predicate i Java?

2. Vad blir utdata av följande kod?

question mark

Vad är det primära syftet med det funktionella gränssnittet Predicate i Java?

Select the correct answer

question mark

Vad blir utdata av följande kod?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 1. Kapitel 4
some-alt