Próbuję nauczyć się korzystać z funkcji Java 8 (takich jak lambdy i strumienie) w moim codziennym programowaniu, ponieważ pozwala to na znacznie czystszy kod.Strumienie Java 8, lambdas
Oto, nad czym aktualnie pracuję: Otrzymuję strumień ciągów z lokalnego pliku z pewnymi danymi, które później przekształcam w obiekty. Struktura pliku wejściowego wygląda mniej więcej tak:
Airport name; Country; Continent; some number;
A mój kod wygląda następująco:
public class AirportConsumer implements AirportAPI {
List<Airport> airports = new ArrayList<Airport>();
@Override
public Stream<Airport> getAirports() {
Stream<String> stream = null;
try {
stream = Files.lines(Paths.get("resources/planes.txt"));
stream.forEach(line -> createAirport(line));
} catch (IOException e) {
e.printStackTrace();
}
return airports.stream();
}
public void createAirport(String line) {
String airport, country, continent;
int length;
airport = line.substring(0, line.indexOf(';')).trim();
line = line.replace(airport + ";", "");
country = line.substring(0,line.indexOf(';')).trim();
line = line.replace(country + ";", "");
continent = line.substring(0,line.indexOf(';')).trim();
line = line.replace(continent + ";", "");
length = Integer.parseInt(line.substring(0,line.indexOf(';')).trim());
airports.add(new Airport(airport, country, continent, length));
}
}
I w moim głównym klasy I iteracyjne nad strumieniem obiektu i wydrukować wyniki:
public class Main {
public void toString(Airport t){
System.out.println(t.getName() + " " + t.getContinent());
}
public static void main(String[] args) throws IOException {
Main m = new Main();
m.whatever();
}
private void whatever() throws IOException {
AirportAPI k = new AirportConsumer();
Stream<Airport> s;
s = k.getAirports();
s.forEach(this::toString);
}
}
Moje pytanie brzmi następująco: Jak mogę zoptymalizować ten kod, więc nie muszę analizować linii z pliku osobno, ale zamiast tego utworzyć strumień obiektów Lotnisko prosto z pliku źródłowego? Czy jest to zakres, w którym mogę to zrobić?
Uwaga: powinieneś zamknąć plik: 'try (Stream lines = Files.lines (...)) {lines.map (xxx) .collect (...)};' –
assylias