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

从Java返回可选ifPresent()

姜宏放
2023-03-14

我知道你不能从ifPresent()返回,所以这个例子不起作用:

public boolean checkSomethingIfPresent() {
    mightReturnAString().ifPresent((item) -> {
        if (item.equals("something")) {
            // Do some other stuff like use "something" in API calls
            return true; // Does not compile
        }
    });
    return false;
}

其中,mightreurnastring()可以返回有效字符串或空可选字符串。我所做的工作是:

public boolean checkSomethingIsPresent() {
    Optional<String> result = mightReturnAString();

    if (result.isPresent()) {
        String item = result.get();
        if (item.equals("something") {
            // Do some other stuff like use "something" in API calls
            return true;
        }
    }
    return false;
}

这是更长的,并没有太大的不同,只是检查空值摆在首位。我觉得必须有一个更简洁的方式使用可选。

共有3个答案

申昌勋
2023-03-14

虽然@nullpoint er和@Ravindra演示了如何将可选项与另一个条件合并,但您必须做更多的工作才能调用API并按照问题中的要求执行其他操作。在我看来,以下内容看起来相当易读和简洁:

private static boolean checkSomethingIfPresent() {
    Optional<String> str = mightReturnAString();
    if (str.filter(s -> s.equals("something")).isPresent()) {
        //call APIs here using str.get()
        return true;
    }
    return false;
}

更好的设计是链接方法

private static void checkSomethingIfPresent() {
    mightReturnFilteredString().ifPresent(s -> {
        //call APIs here
    });
}

private static Optional<String> mightReturnFilteredString() {
    return mightReturnAString().filter(s -> s.equals("something"));
}

private static Optional<String> mightReturnAString() {
    return Optional.of("something");
}
赵奕
2023-03-14

映射到布尔值怎么样?

public boolean checkSomethingIfPresent() {
    return mightReturnAString().map(item -> {
        if (item.equals("something")) {
            // Do some other stuff like use "something" in API calls
            return true; // Does not compile
        }
        return false; // or null
    }).orElse(false);
}
鲜于致远
2023-03-14

我认为你要寻找的只是简单的过滤器,然后检查是否存在:

return result.filter(a -> a.equals("something")).isPresent();
 类似资料:
  • 问题内容: 如何通过使用和避免返回值? 例: 问题答案: 要返回可选值的值,或者返回默认值(如果可选值没有值),则可以使用。 请注意,我重写了查找最长名称的代码:您可以直接与比较器比较每个String的长度。可以通过调用键提取器作为方法引用来获得一个这样的比较器。

  • 是否有任何方法可以从NamedParameterJdbcTemplate返回可选的? 我的查询有时会返回空。所以我想要漂亮的方法来检查空。我不想做尝试捕捉空结果数据访问异常,因为这个有点丑。

  • 我试图模拟一个对象,该对象返回一个带有Mockito的Java可选对象: 当被调用,它返回。 我希望方法返回 返回的任何原因? 方法如下: 以下是Junit:

  • 问题内容: 我正在尝试做这样的事情: 这将不起作用,因为ifPresent将消费者功能接口作为参数,其具有无效的accept(T t)。它不能返回任何值。还有其他方法吗? 问题答案: 实际上,您正在搜索的是:Optional.map。您的代码将如下所示: 如果可以的话,我宁愿忽略通过。最后,您在这里不会获得任何收益。一个稍微不同的变体: 如果由于另一个调用而已经有了-object ,出于单一原因,

  • Java 8中引入的类型对于很多开发人员来说是一个新鲜事物。 返回类型的getter方法代替经典的是一个好的实践吗?假设值可以是。

  • Java1.8正在接收类,它允许我们显式地说明一个方法何时可能返回空值,并在使用它之前“强制”它的使用者验证它是否为空()。 我看到C#有,它执行类似的操作,但使用的是基本类型。它似乎用于DB查询,以区分值是否存在且为0,以及值是否不存在且为NULL。 但似乎C#的对对象不起作用,只对基本类型起作用,而Java的只对对象起作用,对基本类型不起作用。 在C#中是否有一个可为空的/可选的类,迫使我们在