如果代码中有任何异常,如何使用Optional返回空值?

Des*_*tor 3 optional java-8

对于Optional / Java8用法来说,这是一个很新的知识,我对其用法有疑问。我的API中有一个函数,该函数返回可以为null或为空的String。它类似于在电子邮件中查找ID,例如:abc@gmail.com-> abc是o / p。

现在,一种方法是:

public Optional<String> getUser(final String emailId) {

        if (TextUtils.isEmpty(emailId)) {
            return Optional.empty();
        }

        String userIDSeparator = "@";
        int userNameEndIndex = emailId.indexOf(userIDSeparator);

        if (userNameEndIndex == -1) {
            return Optional.empty();
        }

        return Optional.of(emailId.substring(0, userNameEndIndex));
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有任何更整洁的方式返回可选项?

另外,Optional是Java8中引入的,因此代码是否可以与Java7兼容?我知道C中的预处理器不确定是否有类似可用的东西。

注意:我尚未编译此代码,因此可能会出现一些错误。我想要输入Optional。

谢谢!

YCF*_*F_L 5

也许你的意思是这样的:

\n\n
public Optional<String> getUser(final String emailId) {\n    return Optional.ofNullable(emailId)\n            .filter(email -> email.contains("@"))\n            .map(email -> Optional.of(email.replaceAll("(.*?)@.*", "$1")))\n            .orElseGet(Optional::empty);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

例子

\n\n
null              ->   Optional.empty\n""                ->   Optional.empty\n"abc@gmail.com"   ->   abd\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

正如@Aomin\xc3\xa8提到的,我的解决方案中有一些不必要的部分,你可以使用这个版本:

\n\n
public Optional<String> getUser(final String emailId) {\n    return Optional.ofNullable(emailId)\n            .filter(email -> email.contains("@"))\n            .map(email -> email.replaceAll("(.*?)@.*", "$1"));\n}\n
Run Code Online (Sandbox Code Playgroud)\n


Ous*_* D. 5

好吧,代码肯定可以减少。即

public Optional<String> getUser(final String emailId) {
       return Optional.of(emailId)
                      .filter(email -> email.contains("@"))
                      .map(email -> email.substring(0, email.indexOf("@")));
}
Run Code Online (Sandbox Code Playgroud)

如果此方法可以接收null值,则需要更改 Optional.of(emailId)Optional.ofNullable(emailId)

至于:

另外,在Java8中引入了Optional,所以代码可以与Java7兼容吗?

从来没听说过。可能还有其他一些库具有与Java的Optional类型相似的功能,因此,进行一些在线研究可能会把您带到正确的位置。