Vor kurzem hatte ich aufgrund meiner Arbeit die Möglichkeit, Java zu verwenden. Ich habe mein altes Java (1.3) Wissen aktualisiert.
Dies ist eine Funktion zum einfachen Implementieren einer Funktionsschnittstelle.
Das allein ist erfrischend, deshalb möchte ich es anhand eines Beispiels erklären.
public static void main(String[] args) {
class Sample implements Runnable {
public void run() {
System.out.println("I Love Pengin!");
}
}
Runnable runner = new Sample();
times( 10, runner );
}
public static void times( int count, Runnable runner ) {
for( int i = 0; i < count; i++ ) {
runner.run();
}
}
public static void main(String[] args) {
funcCall( 10, () -> System.out.println("I Love Pengin!") );
}
public static void times( int count, Runnable runner ) {
for( int i = 0; i < count; i++ ) {
runner.run();
}
}
Das Beispiel ist die Verarbeitung der Funktion "times", die die angegebene Verarbeitung mehrmals wiederholt. Wenn Sie sie vergleichen, können Sie sehen, dass der Lambda-Ausdruck ziemlich vollständig ist.
Die Methode zum Ersetzen eines Teils der Verarbeitung durch ein anderes Objekt wird als Delegierung bezeichnet. Durch die Verwendung der Lambda-Formel denke ich, dass der Vorteil darin besteht, dass diese Delegation viel einfacher zu schreiben ist.
Sehen wir uns das Format an, wenn Sie den Lambda-Ausdruck verwenden
() -> System.out.println("I Love Pengin!")
()
repräsentiert das Argument der Methode. Wir verwenden diesmal keine Argumente, aber Sie können sie verwenden.->
beschreibt den tatsächlichen Verarbeitungsinhalt. Wenn der Verarbeitungsinhalt mehrere Prozesse umfasst, schreiben Sie hier "-> {Verarbeitung}".Durch Angabe des Arguments des Lambda-Ausdrucks kann das Argument während der Verarbeitung verwendet werden.
(i) -> System.out.println("I Love Pengin!" + i)
Es ist erforderlich, die Funktionsschnittstelle entsprechend dem zu verwendenden Argumenttyp und Rückgabewert ordnungsgemäß zu verwenden. Wenn es ein Argument und keinen Rückgabewert gibt, ist dies wie folgt.
public static void times( int count, Consumer<Integer> runner ) {
for( int i = 0; i < count; i++ ) {
runner.accept(new Integer(i));
}
}
Die ordnungsgemäß zu verwendende Schnittstelle ist wie folgt.
Art | Funktionsschnittstelle | Methode |
---|---|---|
0 Argumente, die keinen Wert zurückgeben | Runnable | run |
1 Argument, das keinen Wert zurückgibt | Consumer | accept |
2 Argumente, die keinen Wert zurückgeben | BiConsumer | accept |
0 Argumente, die einen Wert zurückgeben | Supplier | get |
1 Argument, das einen Wert zurückgibt | Function | apply |
2 Argumente, die einen Wert zurückgeben | BiFunction | apply |
1 Argument, das einen booleschen Wert zurückgibt | Predicate | test |
Zwei Argumente, die einen booleschen Wert zurückgeben | BiPredicate | test |
1 Argument, das das Operationsergebnis zurückgibt | UnaryOperator | test |
2 Argumente, die das Operationsergebnis zurückgeben | BinaryOperator | test |
Recommended Posts