2016-11-28 3 views
0

Ich konvertiere mein Projekt zu Java8. Wie würde ich diesen Code mit java8 besser schreiben?Wie schreibe ich besseren Code mit Java8

List<Bar> bars = new ArrayList<>(); 
for (Foo foo : obj.getFooList()) { 
    bars.add(Helper.fooToBar(foo)); 
} 
return detailsVos; 
+0

Ob es sich um eine 'Liste ' aus einer 'Liste ' durch Aufruf einer Methode oder 'Liste ' aus einer 'Liste ' zu machen, ist die Antwort die gleiche, und Sie können auf das verweisen verknüpfte Frage. Beachten Sie, dass Sie, da Sie die Stream-API eindeutig erlernen, wahrscheinlich mehr verstehen, indem Sie das [Stream-Lernprogramm] (https://docs.oracle.com/javase/tutorial/collections/streams/) lesen und dann lesen irgendwelche Antworten. – Tunaki

Antwort

2

-Stream der Liste Mapping eine Methode Referenz verwendet wird, dann zu einer Liste sammeln und zurückgeben:

return obj.getFooList().stream().map(Helper::fooToBar).collect(Collectors.toList()); 

Beachten Sie, dass „besser“ ist als „sauberere“ interpretiert und „mit der Java 8 Stil ".

Beachten Sie auch, dass dies etwas schlechter als Ihr ursprünglicher Code ausführen kann, aufgrund der Overhead der Verwendung eines Streams.

+1

Ich glaube nicht, dass es schlechter läuft. Nicht im allgemeinen Fall oder nicht in messbarer Weise; Wenn es so wichtig wäre, gäbe es keinen Grund, mit Stream zu beginnen. – Tunaki

+4

Die meisten erfahrenen "Overhead der Verwendung eines Streams" stammt aus der Tatsache, dass, wenn Streams anderswo nicht verwendet werden, ihr anfänglicher Overhead zu Ihrem Betrieb beiträgt. Wenn sie so oft wie die Collection-API verwendet wurden, gab es nie einen sichtbaren Overhead. So wie niemand den 'Iterator'-Overhead bemerkt, wenn er eine for-each-Schleife benutzt ... – Holger

Verwandte Themen