मैं अपने दैनिक प्रोग्रामिंग में जावा 8 फीचर्स (जैसे लैम्ब्डा और स्ट्रीम) का उपयोग कैसे करना सीखता हूं, क्योंकि यह बहुत साफ कोड बनाता है।जावा 8 स्ट्रीम, लैम्बडास
यहां मैं वर्तमान में काम कर रहा हूं: मुझे स्थानीय फाइल से एक स्ट्रिंग स्ट्रीम मिलती है जिसमें कुछ डेटा हैं जो मैं बाद में ऑब्जेक्ट्स में बदल जाता हूं। इनपुट फ़ाइल संरचना इस तरह दिखता है:
Airport name; Country; Continent; some number;
और मेरे कोड इस तरह दिखता है:
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));
}
}
और अपने मुख्य वर्ग में मैं वस्तु स्ट्रीम पर पुनरावृति और परिणाम प्रिंट आउट:
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);
}
}
मेरा प्रश्न यह है: मैं इस कोड को कैसे अनुकूलित कर सकता हूं, इसलिए मुझे फ़ाइल से लाइनों को अलग से पार्स करने की ज़रूरत नहीं है, बल्कि इसके बजाय स्रोत फ़ाइल से सीधे ऑब्जेक्ट्स की स्ट्रीम बनाएं? या यह वह सीमा है जिसमें मैं यह कर सकता हूं?
नोट: आपको फ़ाइल बंद करनी चाहिए: 'कोशिश करें (स्ट्रीम लाइनें = Files.lines (...)) {lines.map (xxx) .collect (...)}; ' –
assylias