Dieser Artikel ist ein Artikel, der ein Implementierungsbeispiel einer grundlegenden Funktionsschnittstelle vorstellt.
Normalerweise würde ich es in einem Lambda-Ausdruck implementieren oder in einem Stream verwenden, aber der Einfachheit halber wage ich es, eine vertraute Methode zu verwenden, anstatt sie zu verwenden.
Ich wünschte, ich könnte das Gefühl bekommen, dass "Methoden in Variablen gehen". (Genau genommen ist es eine Klasse)
Im Paket java.util.function sind 43 Funktionsschnittstellen definiert, es sind jedoch vier Grundlagen zu beachten. Abgesehen von diesen vier kann man davon ausgehen, dass es sich um erweiterte Typen handelt.
Supplier Jemand, der etwas hat und es mir gibt. Die abstrakte Methode ist get. Kein Argument mit Rückgabewert.
import java.time.LocalDateTime;
import java.util.function.Supplier;
public class Main {
public static void main(String[] args) {
Supplier<LocalDateTime> s = LocalDateTime::now;
System.out.println(s.get()); // -> 2017-01-11T16:29:08.086
}
}
Consumer Eine Person, die verarbeitet, was Sie erhalten. Die abstrakte Methode ist akzeptieren. Mit Argumenten kein Rückgabewert.
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) {
Consumer<String> c = System.out::println;
c.accept("test"); // -> test
}
}
Predicate Eine Person, die die Wahrheit über das zurückgibt, was sie erhalten hat. Die abstrakte Methode ist Test. Mit Argument, mit Rückgabewert (nur Boolescher Wert).
import java.util.function.Predicate;
public class Main {
public static void main(String[] args) {
Predicate<String> p = ""::equals;
System.out.println(p.test("foo")); // -> false
}
}
Function Eine sogenannte Funktion, die verarbeitet und zurückgibt, was Sie erhalten. Die abstrakte Methode wird angewendet. Es gibt ein Argument und einen Rückgabewert.
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<String, Integer> f = Integer::parseInt;
System.out.println(f.apply("55") + 45); // -> 100
}
}
Recommended Posts