java-8 - 如果其中的代码有任何异常,如何使用 Optional 返回空?

标签 java-8 optional

Optional/Java8 的用法还很新,我对它的用法有疑问。
我的 API 中有一个函数,它返回一个可以为 null 或为空的字符串。它类似于在电子邮件中查找 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));
}

我想知道是否有任何更简洁的方法来返回 Optional?

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

笔记:
我没有编译这段代码,所以可能会有一些错误。我想要 Optional 的输入。

谢谢!

最佳答案

嗯,代码当然可以减少。 IE。

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

如果此方法可以收到 null值那么你需要改变 Optional.of(emailId)Optional.ofNullable(emailId) .

至于:

Also, Optional was introduced in Java8 so is there any way the code can be java7 compatible?



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

关于java-8 - 如果其中的代码有任何异常,如何使用 Optional 返回空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49348154/

相关文章:

java - 如何从嵌套的 ArrayList 访问特定元素

list - 如何从 map 中获取 optional 值作为 optional 列表?

Java 8 一个流到多个映射

Java 函数式编程 : How to convert a if-else ladder inside for loop to functional style?

java - 如何在以泛型数组为参数的泛型方法中实现 compareTo?

vb.net - 在类中的函数中使用颜色作为 optional 参数

android - Makin共享库 optional

ios - 即使在展开时也获得 "Optional(<data value>)"的值

swift - Swift ReferenceWritableKeyPath 如何使用 Optional 属性?

java-8 - 与从迭代器创建的流的并行性