die folgenden als Beispiel für Datenklassen Gegeben:Warum kann Stream.flatMap keine Sammlung akzeptieren?
class Country {
List<Region> regions = new ArrayList<>();
List<Region> getRegions() {
return regions;
}
}
class Region {
String getName() {
return "some name";
}
}
Vorausgesetzt ich eine Liste der Länder
List<Country> countries = new ArrayList<>();
Und wollte hätte ich die in ihren Regionen und ihren entsprechenden Namen Streamen Ich mag würde um folgende Aktionen: jedoch
countries.stream().flatMap(Country::getRegions).map(Region::getName)...
dass Code nicht, da der Rückgabewert von „getRegions“ eine Sammlung ist nicht kompiliert (Liste) im Gegensatz zu einem Stream, der von der flatMap-Methode akzeptiert wird. Aber da ich weiß, dass jede Sammlung über seine Collection.stream() Methode gestreamt werden kann, sollte das kein Problem sein. Noch bin ich gezwungen, es wie folgt zu schreiben:
Welches ist (in einem reicheren Kontext) weit weniger lesbar als das erstere.
Fragen sind, gibt es irgendeinen Grund, den ich verpasse, um so sperrig zu sein? Ich habe viele Beispiele in unserem Rahmen, in denen ich gezwungen bin, diesen Weg einzuschlagen, wobei ich immer einen sauren Geschmack hinterlasse. (Ich denke, ich muss nur Kotlin zu unseren Projekten hinzufügen und erweitern Sie die Stream-Klasse mit einer FlatMap-Methode, die eine Sammlung nimmt: p oder mache ich?)
Ich versuchte auch Folgendes, da es Sinn machte in meinem Kopf, offensichtlich kompilierte es nicht: Land :: getRegions :: stream – Lukas
Ich stimme zu, dass 'flatMap' sollte eine Sammlung akzeptieren, aber ich bin mir nicht sicher, ob SO ist in der Lage sein wird, eine definitive Erklärung abzugeben, außer dass "die Leute, die es geschrieben haben, es nicht so geschrieben haben". – khelwood
"Nein" könnte auch eine Antwort sein :) – Lukas