当前位置: 首页 > 知识库问答 >
问题:

Java流--使用方法引用的后续映射,还是使用lambda的单个映射?[副本]

欧阳博超
2023-03-14

在流API中映射对象的更好实践是什么?

class SomeObject{
}
class SomeComplexObject {
    private SomeObject someObject;

    public SomeObject getSomeObject() {
        return someObject;
    }
}
class SomeMoreComplexObject {
    private SomeComplexObject someComplexObject;

    public SomeComplexObject getSomeComplexObject() {
        return someComplexObject;
    }
}
List<SomeMoreComplexObject> list;

1-带有方法引用的后续map():

list.stream()
        .map(SomeMoreComplexObject::getSomeComplexObject)
        .map(SomeComplexObject::getSomeObject);
list.stream()
        .map(smco -> smco.getSomeComplexObject().getSomeObject());

为什么呢?

共有1个答案

漆雕兴平
2023-03-14

表现方式一点都不重要。

从风格上来说,我认为这也不重要,因为社区并没有明确地致力于这样或那样的方式。如果社区在其中一个方面实现了标准化,打破这种模式就会付出很大的代价(在罗马,就像罗马人一样--如果您真的关心编写其他人可以阅读的代码以及能够阅读和集成其他人编写的代码,这通常是一个很好的建议;它还可以提高性能,因为hotspot最终是一个模式匹配机,它的模式趋向于常用的习惯用法)。

换句话说,抛硬币。

 类似资料:
  • 我有一些代码需要帮助...我正在尝试使用两个地图作为源并同时使用java lambdas构建地图 我可以用你们在上面看到的foreach做到这一点,但我试图用lambdas做到这一点。。。像这样的 我想要的输出是这样的 但我无法理解

  • 让我们假设开发中的一个非常正常的行为:我有一个集合,需要将这个集合映射到另一个对象。flatMap场景。 示例:

  • 问题内容: 假设我有一个void方法,该方法只对对象进行转换而没有返回任何值,并且我想在流map()函数的上下文中使用它,如下所示: 该示例是为了简单起见而构成的-实际方法除了在处理对象的UUID之外,还在做其他事情。 无论如何,在上述情况下如何使用void方法?当然,我可以使该方法返回转换后的对象,但这不重要,并且违反了设计(该方法应为空)。 问题答案: 似乎是强制使用Java 8流的情况。相反

  • 假设我有一个对对象进行转换而不返回任何值的空方法,我想在stream map()函数的上下文中使用它,如下所示: 这个例子是为了简单起见——实际的方法不仅仅是搞乱对象的UUID。 不管怎样,在上面这样的场景中如何使用空方法?当然,我可以让该方法返回转换后的对象,但这不是重点,并且违反了设计(该方法应该是空的)。

  • 还在学习Java8。我的代码看起来像: 上述代码不起作用,因为peek()无法访问主流变量,即map()中使用的电子邮件。我该如何解决这个问题?