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

Mik*_*elF 0 java overloading java-8 java-stream

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

Stream<Foo> stream = list.stream().flatMap(fs -> fs.stream());
//or
Stream<Foo> stream = list.stream().flatMap(Collection::stream);
Run Code Online (Sandbox Code Playgroud)

我认为这正是方法引用的设计目标,它确实提高了可读性.现在考虑一下:

Stream<Bar> stream = list.stream().flatMap(fs -> fs.getBarList().stream());
Run Code Online (Sandbox Code Playgroud)

有两个链式方法调用,没有方法参考是可能的,我已经发生了几次这种情况.虽然这不是一个大问题,但它似乎偏离了方法参考简洁性.

在使用JavaFX 8之后,我注意到它们的API常量是方便的方法.Java是一种非常冗长的语言,在我看来,简单的方法重载是JavaFX的一大卖点.

所以我的问题是,我想知道为什么没有Stream.flatMap(Collection)可以被称为的方便方法:

Stream<Bar> stream = list.stream().flatMap(Foo::getBarList);
Run Code Online (Sandbox Code Playgroud)

这是甲骨文人员故意遗漏的吗?或者这会引起任何混淆吗?

注意:我知道"不基于意见的问题政策",我不是在寻找意见,我只是想知道是否有理由不采用这种方法.

Lou*_*man 6

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

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