Java 8 Streams, Lambdas

8

Ich versuche zu lernen, Java-8-Funktionen (wie Lambdas und Streams) in meiner täglichen Programmierung zu verwenden, da es für viel saubereren Code sorgt.

Hier arbeite ich gerade: Ich bekomme einen String-Stream von einer lokalen Datei mit einigen Daten, die ich später in Objekte umwandeln werde. Die Struktur der Eingabedatei sieht ungefähr so ​​aus:

%Vor%

Und mein Code sieht so aus:

%Vor%

Und in meiner Hauptklasse iteriere ich über den Objektstrom und drucke die Ergebnisse aus:

%Vor%

Meine Frage ist: Wie kann ich diesen Code optimieren, so dass ich die Zeilen nicht separat aus der Datei analysieren muss, sondern stattdessen einen Strom von Objekten direkt aus der Quelldatei erstellen muss? Oder ist das der Umfang, in dem ich das tun kann?

    
Venraey 27.05.2015, 12:12
quelle

2 Antworten

11

Sie müssen map() um die Daten zu transformieren, wenn sie vorbei sind.

%Vor%

Dies wird Stream<Airport> zurückgeben - Wenn Sie List zurückgeben wollen, müssen Sie am Ende die Methode collect verwenden.

Dieser Ansatz ist ebenfalls zustandslos, dh Sie benötigen nicht den Wert airports auf Instanzebene.

Sie müssen Ihre createAirport-Methode aktualisieren, um etwas zurückzugeben:

%Vor%

Wenn Sie nach einem funktionaleren Ansatz für Ihren Code suchen, sollten Sie eine Neuschreibung von createAirport in Betracht ziehen, damit die Zeile nicht mutiert wird. Builders sind auch nett für diese Art von Sache.

%Vor%

Wenn Sie alles zusammenwerfen, sieht Ihre Klasse jetzt so aus.

%Vor%     
Steve Chaloner 27.05.2015, 12:17
quelle
0

Der von Steve gepostete Code sieht gut aus. Aber es gibt noch zwei Orte, die verbessert werden können: 1, Wie man eine Zeichenkette teilt. 2, kann es Problem verursachen, wenn die Leute vergessen oder nicht wissen, um den Stream zu schließen, der erstellt wird, indem die Methode getAirports () aufruft. Also ist es besser, die Aufgabe (toList () oder was auch immer) an Ort und Stelle zu beenden. Hier ist Code von AbacusUtil

%Vor%

// Oder ausprobieren:

%Vor%

Offenlegung: Ich bin der Entwickler von AbacusUtil.

    
user_3380739 02.12.2016 20:26
quelle

Tags und Links