Eine funktionale Schnittstelle ist eine Schnittstelle, die nur eine abstrakte Methode hat und als Zuweisungsziel für Lambda-Ausdrücke und Methodenreferenzen verwendet wird. Ich habe versucht, die Standardfunktionsschnittstelle zusammenzufassen
Als Standardschnittstelle für Funktionstypen werden typische Methodentypen im Paket java.util.function
definiert.
Schnittstelle | Methode | Erläuterung |
---|---|---|
Function <T, R> | R apply (T t) | Nimmt ein Argument vom Typ T und gibt ein Ergebnis vom Typ R zurück |
Consumer <T> | void accept (T t) | Empfängt Argumente vom Typ T und gibt keine Ergebnisse zurück |
Predicate <T> | boolean test(T t) | Nimmt ein Argument vom Typ T und gibt das Ergebnis des booleschen Werts zurück |
Supplier <T> | T get() | Gibt ein Ergebnis vom Typ T ohne Argumente zurück |
Sample.java
// Function<T, R>
//Beispiel: Gibt die Zeichenfolgenlänge des Arguments zurück
Function<String, Integer> function = String::length;
System.out.println(function.apply("12345")); // 5
// Consumer<T>
//Beispiel: Geben Sie die Zeichenfolgenlänge des Arguments aus
Consumer<String> consumer = str -> System.out.println(str.length());
consumer.accept("12345"); // 5
// Predicate<T>
//Beispiel: In der Argumentzeichenfolge"foo"Beurteilung, ob enthalten ist
Predicate<String> predicate = str -> Objects.nonNull(str) && str.contains("foo");
System.out.println(predicate.test("foo bar")); // true
// Supplier<T>
//Beispiel:"Sample"Gib es zurück
Supplier<String> supplier = () -> "Sample";
System.out.println(supplier.get()); // Sample
Sie können Standardfunktionsschnittstellen kombinieren, um neue Funktionsschnittstellen zu erstellen Synthese mit "compose", "andThen" (Der Unterschied zwischen "compose" und "andThen" ist die Reihenfolge der Komposition) Das Prädikatsystem kann mit "und", "oder", "negieren" synthetisiert werden
Sample.java
//Funktionszusammensetzung der Funktion
Function<String, Integer> function1 = String::length;
Function<Integer, Integer> function2 = i -> i * 100;
//Bei Verwendung von Compose
Function<String, Integer> newFunction1 = function2.compose(function1);
//Bei Verwendung von andThen
Function<String, Integer> newFunction2 = function1.andThen(function2);
System.out.println(newFunction1.apply("12345")); // 500
System.out.println(newFunction2.apply("12345")); // 500
//Prädikatfunktionszusammensetzung
Predicate<Integer> predicate1 = i -> i % 2 == 0; //Urteil, ob es gerade ist
Predicate<Integer> predicate2 = i -> i >= 100; //Beurteilung, ob es 100 oder mehr ist
//Bestimmen Sie, ob es gerade ist und 100 oder mehr
Predicate<Integer> newPredicate1 = predicate1.and(predicate2);
//Bestimmen Sie, ob es ungerade und kleiner als 100 ist(negate()Ist eine logische Ablehnung)
Predicate<Integer> newPredicate2 = predicate1.negate().and(predicate2.negate());
System.out.println(newPredicate1.test(100)); // true
System.out.println(newPredicate2.test(99)); // true
Recommended Posts