Predicate und Komposition
Boolesche Tests kombinieren
Predicate und Komposition ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ein Predicate tut
Predicate<T> nimmt einen Wert entgegen und gibt einen boolean zurück.
- Seine Methode ist
boolean test(T t). - Es modelliert eine Ja/Nein-Bedingung.
import java.util.function.Predicate;
public class Main {
public static void main(String[] args) {
Predicate<Integer> isEven = n -> n % 2 == 0;
System.out.println(isEven.test(4));
System.out.println(isEven.test(5));
}
}Predicate in filter
Stream.filter nimmt ein Predicate entgegen und behält nur passende Elemente.
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Integer> nums = List.of(1, 2, 3, 4, 5, 6);
List<Integer> evens = nums.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println(evens);
}
}Mit and kombinieren
and erstellt ein Predicate, das nur dann true ist, wenn beide Predicates erfolgreich sind.
import java.util.function.Predicate;
public class Main {
public static void main(String[] args) {
Predicate<Integer> positive = n -> n > 0;
Predicate<Integer> even = n -> n % 2 == 0;
Predicate<Integer> both = positive.and(even);
System.out.println(both.test(4));
System.out.println(both.test(-2));
}
}Mit or kombinieren
or gibt true zurück, wenn mindestens eines der Predicates erfolgreich ist.
import java.util.function.Predicate;
public class Main {
public static void main(String[] args) {
Predicate<String> empty = String::isEmpty;
Predicate<String> shortStr = s -> s.length() < 3;
Predicate<String> either = empty.or(shortStr);
System.out.println(either.test(""));
System.out.println(either.test("hi"));
System.out.println(either.test("hello"));
}
}Mit negate negieren
negate invertiert das Ergebnis eines Predicates und liefert damit das logische NOT.
import java.util.function.Predicate;
public class Main {
public static void main(String[] args) {
Predicate<Integer> even = n -> n % 2 == 0;
Predicate<Integer> odd = even.negate();
System.out.println(odd.test(3));
}
}Statische Hilfsmethode Predicate.not
Predicate.not(p) ist eine gut lesbare statische Möglichkeit zur Negation, besonders in Verbindung mit Methodenreferenzen.
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> words = List.of("", "a", "", "bc");
List<String> nonEmpty = words.stream()
.filter(Predicate.not(String::isEmpty))
.collect(Collectors.toList());
System.out.println(nonEmpty);
}
}Predicate.isEqual
Predicate.isEqual(target) erstellt ein Predicate, das mithilfe von Objects.equals die Gleichheit mit einem festen Wert prüft.
import java.util.function.Predicate;
public class Main {
public static void main(String[] args) {
Predicate<String> isJava = Predicate.isEqual("java");
System.out.println(isJava.test("java"));
System.out.println(isJava.test("python"));
}
}Mehrere Bedingungen verketten
Sie können and, or und negate verketten, um komplexe Regeln auszudrücken. Verwenden Sie Klammern, um die Gruppierung zu steuern.
import java.util.function.Predicate;
public class Main {
public static void main(String[] args) {
Predicate<Integer> big = n -> n > 100;
Predicate<Integer> even = n -> n % 2 == 0;
Predicate<Integer> rule = big.and(even).or(n -> n == 0);
System.out.println(rule.test(0));
System.out.println(rule.test(102));
System.out.println(rule.test(101));
}
}BiPredicate für zwei Eingaben
BiPredicate<T, U> prüft zwei Argumente und unterstützt ebenfalls and, or und negate.
import java.util.function.BiPredicate;
public class Main {
public static void main(String[] args) {
BiPredicate<String, Integer> hasLength = (s, n) -> s.length() == n;
System.out.println(hasLength.test("hello", 5));
}
}Predicates in anyMatch
Terminaloperationen von Streams wie anyMatch, allMatch und noneMatch nehmen alle ein Predicate entgegen.
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> nums = List.of(1, 3, 5, 8);
System.out.println(nums.stream().anyMatch(n -> n % 2 == 0));
System.out.println(nums.stream().allMatch(n -> n > 0));
}
}Wiederverwendbare Predicate-Konstanten
Wenn Sie Predicates als benannte Variablen definieren, werden Filterpipelines selbsterklärend und wiederverwendbar.
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
Predicate<String> nonBlank = s -> !s.isBlank();
List<String> input = List.of("a", " ", "", "b");
System.out.println(input.stream().filter(nonBlank).collect(Collectors.toList()));
}
}Schnelltest
Was erzeugt p.and(q)?
Zusammenfassung
Sie haben boolesche Prüfungen zusammengesetzt:
Predicate<T>verwendettest, um einen boolean zurückzugeben.and,orundnegateverbinden Bedingungen mit Kurzschlussauswertung.Predicate.notundPredicate.isEqualsind praktische statische Hilfsmethoden.BiPredicateprüft zwei Eingaben.
Lerne Java mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 104
- Lektionen
- 374
Häufig gestellte Fragen
Ist die Lektion „Predicate und Komposition“ kostenlos?
Ja — der vollständige Text von „Predicate und Komposition“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Predicate und Komposition“?
Boolesche Tests kombinieren Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Java Academy zu starten?
Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Predicate und Komposition“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?
Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Function und BiFunction
- Supplier und Consumer
- Predicate und Komposition
- Benutzerdefinierte funktionale Interfaces