为什么没有stream.flatmap(集合)方法



当前,要将List<List<Foo>>转换为Stream<Foo>,您必须使用以下内容:

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);

这是Oracle的人们故意遗漏吗?还是会引起任何混乱?

注意:我知道"基于不开放的问题政策",而且我不是在寻找意见,我只是想知道是否有这样的方法不是实施。

  • 因为Stream已经是一个很大的界面,并且有阻力使其更大。
  • 因为还有解决方法list.stream().map(Foo::getBarList).flatMap(List::stream)

您还可以在http://mail.openjdk.java.net/pipermail/pipermail/lambda-libs-spec-observers/2013-april/001690.html上查看原始讨论。我没有看到专门讨论的选项;它可能已经被丢弃了吗?

最新更新