Übersicht über Java 8-Funktion, Verbraucher, Lieferant, Prädikat

Motivation

In Java8 gibt es Lambda, Stream, zusätzliche Klassen usw., aber ich bin der Meinung, dass Funktion, Verbraucher, Lieferant, Prädikat usw. die Basis sind, also verstehe ich es richtig.

Function

Wie benutzt man

Ein Mechanismus zum Behandeln des Verhaltens von Methoden in Java mit Instanzen. Die Methodendefinition, die herkömmlicherweise wie folgt durchgeführt wurde,

MethodDefinition


R functionName(T arg) {
    return new R();
}

Es kann in der folgenden Form in eine Instanzdefinition geändert werden.

ConventionalDefinition


Function<T, R> functionalInstance = new Function<T, R>() {
    @Override
    public R apply(T arg) {
        return new R();
    }
};

Dies ist problematisch, daher können Sie den Lambda-Ausdruck verwenden, um Folgendes zu tun.

InstanceDefinition


Function<T, R> functionalInstance = arg -> new R();

Im Fall der Methodendefinition wurde es wie folgt aufgerufen:

MethodCall


R returnValue = functionName((T) argument);

Wenn Sie Function verwenden, verwenden Sie die Apply-Methode.

InstanceCall


R returnValue = functionalInstance.apply((T) argument);

Und.

Die Methode in Java ist kein erstklassiges Objekt, aber es scheint, dass wir einen neuen Mechanismus geschaffen haben, um die Einführung eines solchen Stils zu vereinfachen.

Consumer Sobald Sie die Funktion kennen, ist es einfach, und der Consumer ist eine Schnittstelle zum Definieren von Instanzen, die Argumente verbrauchen. Da das Argument verwendet wird, der Rückgabewert jedoch nicht vorhanden ist, gibt es auf der Argumentseite nur eine Typspezifikation durch Generika.

Als Image eine Instanzversion der folgenden Methode.

void consumer(T arg) {
    something(arg);
}

Die Definitionsmethode ist wie folgt. Überschreiben Sie die Methode accept, um das Verhalten zu bestimmen.

Consumer<T> consumer = new Consumer<T>() {
    @Override
    public void accept(T arg) {
        something(arg);
    }

Für Lambda unten.

Consumer<T> consumer = arg -> something(arg);

Der Anruf wird wie folgt getätigt.

consumer.accept((T) argument)

Supplier Supplier ist eine Schnittstelle zum Definieren von Verhalten, die keine Argumente akzeptiert, aber einen Rückgabewert hat.

Als Image dient es zum Erstellen einer Instanzversion der folgenden Methode.

T consumer() {
    return new T();
}

Es ist wie folgt definiert.

Supplier<T> supplier = new Supplier<T>() {
    @Override
    public T get() {
        return new T();
    }
}

Unten für Lambda.

Supplier<T> supplier = () -> new T();

Gehen Sie bei der Verwendung wie folgt vor.

supplier.get();

Predicate Prädikat ist eine Schnittstelle, die ein Argument empfängt und einen booleschen Wert zurückgibt.

//Richtig, wenn das Argument 1 ist, andernfalls falsch
Predicate<Integer> predicate = arg -> arg == 1;

Integer argument = 1;
if (predicate.test(argument)) {
    System.out.println("argument is 1");
} else {
    System.out.println("argument is not 1");
}

Ich benutze es so.

Ich denke, es liegt in der Nähe von Function <T, Boolean>, aber in diesem Fall gibt es ein Unboxing von Boolean zu Boolean. Ist es also einer der Zwecke, dies zu vermeiden? Es scheint eine Methode namens und oder oder zu geben, aber ich werde sie weglassen, weil sie selten verwendet zu werden scheint.

Wenn Sie ein vollständiges Verständnis von synchronisiert wünschen

Erläuterung des synchronisierten und typischen Fehlerbeispiels Ich habe geschrieben, also schau es dir bitte auch an. Empirisch sind etwa 70% der Menschen falsch.

Recommended Posts

Übersicht über Java 8-Funktion, Verbraucher, Lieferant, Prädikat
Implementierung einer ähnlichen Funktion in Java
[JQuery] Implementierungsverfahren der AutoComplete-Funktion [Java / Spring]
[Java] Übersicht über Java
Eine Übersicht über das native Java-Framework Quarkus von Kubernetes
Abgelaufene Java-Sammlung
Voraussichtliche Funktionen von Java
[Java] Bedeutung der serialVersionUID
NIO.2 Überprüfung von Java
Bewertung von Java Shilber
Java - Vereinigung von Kommentaren
Geschichte der Java-Annotationen
[Hinweis] Java: Zeichenkettenübersicht
Java (Verdienste des Polymorphismus)
Implementierung der Pagenationsfunktion
NIO Bewertung von Java
Java 8 Completable Future Survey
[Java] Drei Funktionen von Java
Zusammenfassung der Java-Unterstützung 2018
Vergleich des Schreibens von Callback-Funktionen (Java, JavaScript, Ruby)