目前,要将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;我并不是在寻找意见,我只是想知道是否有理由不采用这种方法。
答案 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看到原始讨论;我没有看到专门讨论的那个选项;它可能已经被丢弃了吗?