加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java-8 – Guava Java 8可选可选,有多个选项

发布时间:2020-12-15 04:32:05 所属栏目:Java 来源:网络整理
导读:这是一个具有多个可能值的Guava可选项. long numberToUse = Long.parseLong(Optional .ofNullable(System.getenv(ENV_VAR)) .or(Optional.ofNullable(System.getProperty(PROP_VAR))) .or("15")); 如何将其转换为干净的Java 8语法? 解决方法 您可以使用嵌套
这是一个具有多个可能值的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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读