对于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。
谢谢!
也许你的意思是这样的:
\n\npublic 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}\nRun Code Online (Sandbox Code Playgroud)\n\n例子
\n\nnull -> Optional.empty\n"" -> Optional.empty\n"abc@gmail.com" -> abd\nRun Code Online (Sandbox Code Playgroud)\n\n正如@Aomin\xc3\xa8提到的,我的解决方案中有一些不必要的部分,你可以使用这个版本:
\n\npublic Optional<String> getUser(final String emailId) {\n return Optional.ofNullable(emailId)\n .filter(email -> email.contains("@"))\n .map(email -> email.replaceAll("(.*?)@.*", "$1"));\n}\nRun Code Online (Sandbox Code Playgroud)\n
好吧,代码肯定可以减少。即
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类型相似的功能,因此,进行一些在线研究可能会把您带到正确的位置。
| 归档时间: |
|
| 查看次数: |
4289 次 |
| 最近记录: |