考慮下面的數據類的一個示例:爲什麼Stream.flatMap不能接受集合?
class Country {
List<Region> regions = new ArrayList<>();
List<Region> getRegions() {
return regions;
}
}
class Region {
String getName() {
return "some name";
}
}
。假定我會國家
List<Country> countries = new ArrayList<>();
的名單,我想澗那些其區域及其相應的名字,我想要做到以下幾點:
countries.stream().flatMap(Country::getRegions).map(Region::getName)...
但是,該代碼不編譯,因爲「getRegions」的返回值是一個集合(List),而不是FlatMap方法接受的Stream。 但是因爲我知道任何Collection都可以通過它的Collection.stream()方法進行流式處理,這應該不是問題。仍然我被迫寫如下:
countries.stream().flatMap(c -> c.getRegions().stream()).map(Region::getName)...
這是(給予一個更豐富的上下文)遠不如前者可讀。
問題是,有沒有什麼原因,我錯過了,因爲這是龐大的?我在我的框架中有很多例子,我不得不採取這種方式,總是讓我感到酸味。 (猜猜我只需要將Kotlin添加到我們的項目中,並使用flatMap方法擴展Stream類,該方法需要一個Collection:p或我?)
我也嘗試了下面,因爲它在我的腦海中有意義,顯然它沒有編譯: Country :: getRegions :: stream – Lukas
我同意'flatMap'應該接受一個集合,但我不確定SO是能夠提供一個明確的解釋,除了「寫它的人沒有這樣寫」。 – khelwood
「不」也可以是答案:) – Lukas