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

如何将此java lambda代码重构为仅1lambda[重复]

颛孙森
2023-03-14
public static boolean isAnyNullArgs(Supplier<Object>... objs) {
    return Stream.of(objs).anyMatch(o -> o.get() == null);
}

我这么叫它:

if (!isAnyNullArgs(() -> value.getField1(),
                () -> value.getField1().getField2(),
                () -> value.getField1().getField2().getFiled3(),
                ...
)

我有什么方法可以重构我的方法,以便我可以像这样调用它(只有1λ):

if (!isAnyNullArgs(() -> value.getField1(),
                ,value.getField1().getField2(),
                ,value.getField1().getField2().getField3(),
                ...
)

共有1个答案

傅胡媚
2023-03-14

这看起来不可能,因为value.getfield1().getfield2()只有在value.getfield1()不是null时才应该计算。否则,您将得到NullPointerException

这表明您的isanynullargs()方法不太有用。

您不妨写一个单独的条件:

if (value.getField1() != null &&
    value.getField1().getField2() != null &&
    value.getField1().getField2().getField3() != null) {

}
if (Optional.ofNullable(value.getField1())
            .map(f1 -> f1.getField2())
            .map(f2 -> f2.getField3())
            .isPresent ())
if (Optional.ofNullable(value.getField1())
            .map(Field1Class::getField2)
            .map(Field2Class::getField3)
            .isPresent ())
 类似资料:
  • 如果以前声明过宽度和高度,如何分解它们?

  • 我一直在试图找到一种方法来使我的代码指数接受E和X的输入。我知道如果我使用扫描仪util,它将使这成为可能。但是到目前为止,我还没有找到这样做的方法。如果你能帮忙,那就太好了,谢谢! }

  • 主要内容:Eclipse 代码重构Eclipse 代码重构 重命名在整个项目中广泛使用的类可能需要很多时间,但 Eclipse 重构向导通过自动检测对被重命名的类的所有依赖项并对其进行修改,使工作变得更容易。 重构菜单可以通过以下方式打开 : 在 Package Explorer 视图中右键单击 Java 元素并选择 Refactor 菜单项。 在 Java 编辑器中右键单击 Java 元素并选择 Refactor 菜单项。 在包

  • 你好,我正在使用以下函数将数据集中的所有分类值转换为数字,但我想将其转换为使用OneHotEncoder,如何做到这一点? 谢谢

  • 问题内容: 我试图重构代码,并且遇到了这段代码。您能提出建议中的任何重构方法,请说出您使用的折射方法。 问题答案: 您实际上违反了SRP(单一职责原则),因此,每当添加新语言时,都需要触摸此代码库。 为了避免列出大量,您需要一个松散耦合的设计,其中()行为应在单独的类(如英语等)中实现,如下面的代码所示,该代码使用状态模式: 步骤(1):定义界面 步骤(2):定义实现 步骤(3):修改带对象的方法

  • 问题内容: 我刚刚开始使用Java 8,并且正在使用以下代码片段: 如何将其转换为Lambda样式? 问题答案: 如果是 功能界面 ,则可以 这是您问题中其他类的存根实现的完整示例: