2017-05-22 5 views
-2
public static <E extends EntityBase, FE> 
FE findForeignEntity(E entities, Function<E, Long> fnForeignId, Function<Long, FE> fnFindIdIn) { 
    if (entities == null) return null; 
    Long fid = fnForeignId.apply(entities); 
    return fnFindIdIn.apply(fid); 
} 

City city = Utils.findForeignEntity(candidate, 
      c -> c.getAddress() != null ? c.getAddress().getCity() : null, 
      fid -> cityRepo.findOne(fid)); 

wofür steht "fid"? Ich bin nicht vertraut mit dieser Art der Verwendung in Java. Kann mir jemand einen Hinweis geben.Java mit Funktion als Parameter

Antwort

0

Suchen Sie nach einem Lambda-Ausdruck? Schauen Sie sich java's documetation darauf an. Lambdas sind eine großartige Möglichkeit, eine Funktion als Parameter zu verwenden, aber es wird immer nur eine Ein-Zeilen-Funktion sein. Ein schneller kleiner Weg, um Dinge zu umgehen.

0

Offensichtlich kürzt fid "ausländische ID" ab.

Wenn Sie nach der -> Syntax fragen: Das ist ein lambda expression. Ihr Hauptziel ist:

Lambda-Ausdrücke können Sie Instanzen von Single-Methode-Klassen kompakter ausdrücken.

Aber offensichtlich gibt es viel "hinter" diesem Konzept.

+0

Das wird sehr hilfreich sein. –

+0

@GreenBaylee Danke für die Erinnerung an mich ;-) – GhostCat

1

In der Methode findForeignEntity übergeben Sie 3 Argumente, das erste ist entities, das ist das Argument der Methode fnForeignId. Das Ergebnis der Methode fnForeignId ist fid und fid ist die Eingabe für Ihre Methode fnFindIdIn, die Sie FE (Foreign Entity) zurückgibt.

City city = Utils.findForeignEntity(candidate, 
      c -> c.getAddress() != null ? c.getAddress().getCity() : null, 
      fid -> cityRepo.findOne(fid)); 

In diesem Code, was Sie die lambdas möglicherweise verwirrt. Ich werde versuchen, es einfach zu machen. Die 2 Argumente Ihrer Methode findForeignEntity sind Function, die eine functional interface ist, die eine Definition erfordert.

Die Definition des Verfahrens fnForeignId ist

c -> c.getAddress() != null ? c.getAddress().getCity() : null 

die etwas ist, wie

return c.getAddress() != null ? c.getAddress().getCity() : null 

Und Definition des Verfahrens fnFindIdIn ist

fid -> cityRepo.findOne(fid) 

, die als etwas gelesen werden kann, wie

return cityRepo.findOne(fid) 

Diese sind alle Lambdas, die in Java8

eingeführt wurde

Als @GhostCat fid steht für ausländische ID erzählt.

+0

Danke, genau das, was ich brauche. –