2017-03-01 87 views
0

目前,轉換一個List<List<Foo>>Stream<Foo>,你必須使用以下方法:爲什麼沒有Stream.flatMap(Collection)方法?

Stream<Foo> stream = list.stream().flatMap(fs -> fs.stream()); 
//or 
Stream<Foo> stream = list.stream().flatMap(Collection::stream); 

我認爲這正是該方法引用分別設計的,它也提高可讀性不少。現在考慮一下:

Stream<Bar> stream = list.stream().flatMap(fs -> fs.getBarList().stream()); 

有兩個鏈式方法調用,沒有方法引用是可能的,我有這種情況發生在我身上幾次。雖然這不是一個大問題,但它似乎偏離了方法參考的簡潔性。

在使用了JavaFX 8之後,我注意到他們的API常量是便捷方法。 Java是一種非常冗長的語言,在我看來,簡單的方法重載是JavaFX的一大賣點。

所以我的問題是,我不知道爲什麼沒有方便的方法Stream.flatMap(Collection),可以這樣調用:

Stream<Bar> stream = list.stream().flatMap(Foo::getBarList); 

這是甲骨文的人故意遺漏?或者這可能導致混淆?

注意:我知道「沒有意見的問題政策」,我不是在尋找意見,我只是想知道是否有這樣一種方法沒有實施的原因。

+0

誰低估了這個需要留下解釋。 – CodeBlind

回答

6
  • 因爲Stream已經是一個非常大的界面,並且有阻力讓它變大。
  • 因爲還有解決方法list.stream().map(Foo::getBarList).flatMap(List::stream)

你也可以在http://mail.openjdk.java.net/pipermail/lambda-libs-spec-observers/2013-April/001690.html看到原始的討論;我沒有看到特別討論的選擇。它可能已經在那個時候被丟棄了?

+0

非常感謝,我很欣賞來自專家的答案。我沒有想到這個解決方法,我從現在開始肯定會使用它。 – MikaelF

相關問題