为什么没有Stream.flatMap(Collection)方法?

时间:2017-03-01 23:23:12

标签: java java-8 overloading java-stream

目前,要将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人们故意遗漏的吗?或者这会引起混淆吗?

注意:我了解&#34;基于意见的问题政策,&#34;我并不是在寻找意见,我只是想知道是否有理由不采用这种方法。

1 个答案:

答案 0 :(得分:6)

  • 因为Stream已经是一个非常大的界面,并且阻止它变得更大。
  • 因为还有解决方法list.stream().map(Foo::getBarList).flatMap(List::stream)

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

相关问题