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?
Sie müssen map()
um die Daten zu transformieren, wenn sie vorbei sind.
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.
Wenn Sie alles zusammenwerfen, sieht Ihre Klasse jetzt so aus.
%Vor%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% %Vor%Offenlegung: Ich bin der Entwickler von AbacusUtil.
Tags und Links java java-8 lambda java-stream