"Mir ist klar geworden, dass Functional Interface und andere Dinge nützlich sind, aber wofür wird diese" Identität "verwendet? Was um alles in der Welt möchten Sie eine Funktion zurückgeben, die gerade zurückkehrt?" Mir wurde gesagt, es ist also ein sehr neues Memo.
//Wenn es eine solche Klasse gibt
@Data
class Obj {
private int id;
private String data;
}
//Angenommen, es ist eine Liste
List<Obj> list = <some>;
// key:id, value:Generieren Sie eine Karte von obj(* Ich habe das Gefühl, dass es eine bessere Hand gibt)
Map<Integer, Obj> map = list.stream().collect(Collectors.toMap(obj::getId, Function.identity()));
Die funktionale Schnittstelle ist eine Schnittstelle zum Empfangen "der Operation selbst". Es behandelt alle Arten von Operationen wie diese mit Signaturen. Wenn ich jedoch Dinge mit diesem Knall schreibe, ist es nicht ungewöhnlich, dass ich sage: "Nein, du kannst es einfach so lassen, wie es ist! Tu nichts!" Identität ist in solchen Fällen nützlich.
Natürlich kann das Gleiche durch Schreiben von o-> o in Lambda erreicht werden, aber es ist nicht genau dasselbe. Es ist berüchtigt, dass Lambdas tatsächlich anonyme lokale Klassen sind. Je mehr Sie sie verwenden, desto mehr Klassen und Instanzen verwenden Sie. Das bedeutet ein wenig Last. (Richtig, wenn Sie es als Argument übergeben können, bedeutet dies, dass es eine Entität als Objekt hat.)
Andererseits gibt die Identität (abhängig von der JVM-Implementierung) immer dieselbe Instanz zurück: https://stackoverflow.com/questions/28032827/java-8-lambdas-function-identity-or-t-t Sicher, wenn es sicher in einer Einstellung endet, ist es in Ordnung, es leicht mit Lambda zu schreiben. Grundsätzlich hat die Verwendung von Function.identity oder UnaryOperator.identity jedoch den Vorteil, dass Sie sicher sein können, dass Sie nicht versehentlich unbrauchbare Instanzen in Massenproduktion herstellen. Verzeihen wir etwas mehr Typen und Importe.
Identität = Gleichheit. Die Methodenidentität gibt eine gleiche Funktion zurück. Eine Gleichheitsfunktion ist eine "Funktion, die das übergebene Argument zurückgibt" und das Einheitselement in der Funktionskombination. Mit anderen Worten, es ist wie die Nummer 1 (obwohl es vom Bereich des Kontexts abhängt, aber sinnlich).
Recommended Posts