2017-03-01 92 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

相关问题