2015-06-25 7 views
6

Sagen wir, ich habe den folgenden CodeVerwendung mehrerer Kartenfunktionen gegen eine Blockanweisung in einer Karte in einem Java-Stream

data.stream() 
    .map(x -> { 
     Object a = maybeReturnsNull(x); 
     return a == null ? defaultValue : a; 
    }) 

ich eine Funktion, die null zurückkehren könnte, und ich Anwendung auf ein Element des Streams. Ich möchte dann sicherstellen, dass alle null Ergebnisse stattdessen auf einen Standardwert geändert werden. Gibt es einen signifikanten Unterschied zwischen der Verwendung von zwei Maps wie im folgenden Beispiel im Vergleich zum vorherigen Beispiel, das eine Helper-Variable a definiert und einen Codeblock im Lambda-Ausdruck verwendet?

Gibt es einen Standard für die Verwendung von Blockanweisungen mit Lambda-Funktionen?

+1

oder '.map (dieses :: maybeReturnsNull) .map (optional :: ofNullable) .map (o -> o.orElse (default))' – assylias

+2

@assylias: selbst wenn dies nicht der Fall einen Unterschied in der Leistung, ich denke, eine einzelne ".map (x -> Optional.ofNullable (vielleichtReturnsNull (x)). oderElse (defaultValue))" sollte vor drei Mapping-Schritten hier bevorzugt werden. Aber gut, es ist immer noch eine Frage des Geschmacks ... – Holger

Antwort

7

Entweder ist in Ordnung. Wählen Sie die, die Ihnen besser lesbar erscheint. Wenn die Berechnung wie hier natürlich zerfällt, sind die verschiedenen Karten wahrscheinlich besser lesbar. Einige Berechnungen werden nicht natürlich zerlegt, in welchem ​​Fall Sie bei ersteren stecken bleiben. In keinem Fall sollten Sie sich Sorgen machen, dass einer deutlich leistungsfähiger ist als der andere; das ist weitgehend keine Überlegung.