Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Predikat: Datafiltrering | Section
Practice
Projects
Quizzes & Challenges
Frågesporter
Challenges
/
Stream-API i Java

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 för 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 definieras i lambda-uttrycket number -> number % 2 == 0, vilket kontrollerar om talet är delbart med 2 utan rest, vilket avgör dess jämnhet.

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 tillhandahåller 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

Antag 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.

OR-villkor

Anta nu att du behöver kontrollera om ett tal är antingen mindre än 5 eller större än 15.

Du kan använda metoden or(), precis 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 uppfylla endast ett kriterium.

NEGERA Villkor

Antag 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 negerade 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 för 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 för 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

Avsnitt 1. Kapitel 4
some-alt