Java 在map()上使用单个flatMap()是否更好。flatMap()?

Java 在map()上使用单个flatMap()是否更好。flatMap()?,java,java-stream,flatmap,Java,Java Stream,Flatmap,我想知道两种平面映射的情况之间是否有显著差异 案例1: someCollection .stream() .map(CollectionElement::getAnotherCollection) .flatMap(Collection::stream); someCollection .stream() .flatMap(element -> element.getAnotherCollection().stream()); 案例2: some

我想知道两种平面映射的情况之间是否有显著差异

案例1:

someCollection
    .stream()
    .map(CollectionElement::getAnotherCollection)
    .flatMap(Collection::stream);
someCollection
    .stream()
    .flatMap(element -> element.getAnotherCollection().stream());
案例2:

someCollection
    .stream()
    .map(CollectionElement::getAnotherCollection)
    .flatMap(Collection::stream);
someCollection
    .stream()
    .flatMap(element -> element.getAnotherCollection().stream());
应该选择哪一个?就性能而言,其中有哪一项更好

哪一个应该优先

差异是如此的表面化,这取决于你和你的团队——选择一个你觉得更舒服的。我会选择第二个选项,它更简洁

就性能而言,其中有哪一项更好

从时间复杂性的角度来看,不是。第一个例子涉及到创建一些不必要的对象,因此第二个例子是一个更合理的选择。
但是,请记住,我们这里讨论的是微观优化。

我认为这只是两种方式,第二种方式是语法糖!!做和第一个一样的事!!它们的可能复制品正在做完全相同的事情。我要补充的是,外观上的差异可能会在可编辑性方面产生差异。例如,在第一个示例中,在调用
map
flatMap
之间添加一个
filter
或另一个
map
可能更容易。这也可能是一个缺点,但这将是codereview.stackexchange.com的一个主题。“简洁性”也是一个主观性问题;-)在第一个示例中创建的对象是什么?我不太了解Java的流实现,但它不会优化它们吗?@Druckles完全正确,但请记住,上面的任务严格地说是关于平坦流结构-如果您需要一个过滤器/映射,那么您最好在单个flatMap调用之后添加它。关于第二个示例中的额外成本,即使在一个map()调用中向ReferencePipeline添加另一个操作,也会发生很多事情。所以,不仅要创建另一个流对象,还要创建另一个函数接口表示+由map()调用触发的代码。JVM将对其进行优化,但最终需要有人收集垃圾