hea*_*ach 3 optional guava java-8
这是一个具有多个可能值的Guava可选项.
long numberToUse = Long.parseLong(Optional
.ofNullable(System.getenv(ENV_VAR))
.or(Optional.ofNullable(System.getProperty(PROP_VAR)))
.or("15"));
Run Code Online (Sandbox Code Playgroud)
如何将其转换为干净的Java 8语法?
您可以使用嵌套orElse:
long numberToUse = Long.parseLong(Optional
.ofNullable(System.getenv(ENV_VAR))
.orElse(
Optional.ofNullable(System.getProperty(PROP_VAR))
.orElse("15")));
Run Code Online (Sandbox Code Playgroud)
请注意,在Guava和此处System.getProperty(PROP_VAR)分支都会被执行,即使它是不必要的.为了使它懒惰使用orElseGet:
long numberToUse = Long.parseLong(Optional
.ofNullable(System.getenv(ENV_VAR))
.orElseGet(
() -> Optional.ofNullable(System.getProperty(PROP_VAR))
.orElse("15")));
Run Code Online (Sandbox Code Playgroud)
Java-9添加了.or使最后一个样本更简单的方法:
long numberToUse = Long.parseLong(Optional
.ofNullable(System.getenv(ENV_VAR))
.or(() -> Optional.ofNullable(System.getProperty(PROP_VAR)))
.orElse("15"));
Run Code Online (Sandbox Code Playgroud)
正如@BoristheSpider建议的那样,您也可以Long.parseLong进入可选管道:
long numberToUse = Optional
.ofNullable(System.getenv(ENV_VAR))
.or(() -> Optional.ofNullable(System.getProperty(PROP_VAR)))
.map(Long::parseLong)
.orElse(15L);
Run Code Online (Sandbox Code Playgroud)
最后,可以使用Stream API(这也适用于Java-8):
long numberToUse = Stream.of(System.getenv(ENV_VAR), System.getProperty(PROP_VAR))
.filter(Objects::nonNull).findFirst().map(Long::parseLong).orElse(15L);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
580 次 |
| 最近记录: |