gpt4 book ai didi

java-8 - Guava 可选到 Java 8 可选 多种选择

转载 作者:行者123 更新时间:2023-12-01 22:37:19 24 4
gpt4 key购买 nike

这是一个具有多个可能值的 Guava 可选值。

long numberToUse = Long.parseLong(Optional
.ofNullable(System.getenv(ENV_VAR))
.or(Optional.ofNullable(System.getProperty(PROP_VAR)))
.or("15"));

如何将其转换为干净的 Java 8 语法?

最佳答案

您可以使用嵌套orElse :

long numberToUse = Long.parseLong(Optional
.ofNullable(System.getenv(ENV_VAR))
.orElse(
Optional.ofNullable(System.getProperty(PROP_VAR))
.orElse("15")));

请注意,在 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")));

Java-9 添加 .or使最后一个示例更简单的方法:

long numberToUse = Long.parseLong(Optional
.ofNullable(System.getenv(ENV_VAR))
.or(() -> Optional.ofNullable(System.getProperty(PROP_VAR)))
.orElse("15"));

正如 @BoristheSpider 所建议的,您还可以将 Long.parseLong 移动到可选管道中:

long numberToUse = Optional
.ofNullable(System.getenv(ENV_VAR))
.or(() -> Optional.ofNullable(System.getProperty(PROP_VAR)))
.map(Long::parseLong)
.orElse(15L);

最后可以使用 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);

关于java-8 - Guava 可选到 Java 8 可选 多种选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35172265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com