【问题标题】:Java chaining map methods and using optionalJava链接映射方法并使用可选
【发布时间】:2021-12-23 04:39:46
【问题描述】:

我正在使用 Java 8 method1() -> 返回Map<String,Map<String,Set<String>>>

如果我以这种方式链接方法调用 -> method1().get("A").get("B") NullPointerException 可能会发生。 所以我使用以下策略来避免使用传统的if( != null) 代码: Optional.ofNullable(method1()).map(x -> x.get("A")).map(y -> y.get("B")) 但此代码返回 Optional,我需要返回 Set<String>
我该如何转换它,如果是null(在get方法返回null的情况下)如何返回null

提前致谢。

【问题讨论】:

  • 简单地链接另一个.orElse(null) ...
  • 但是你真的发现Optional 方法的链接比一堆 if-then-elses 更具可读性吗?

标签: java dictionary nullpointerexception optional method-chaining


【解决方案1】:

通过 gamgoon 稍微润色一下代码:

    Set<String> result = Optional.of(method1())
            .map(x -> x.get("A"))
            .map(y -> y.get("B"))
            .orElse(Collections.emptySet());
    System.out.println(result);

如果任一键不在查找的地图中,则输出:

[]

您可能会识别打印空集合的结果。在您想要收藏的地方,您不应该接受null。使用空集合表示没有元素。同样,我假设您的method1() 可能会返回一个空地图,但不会返回null。所以我们在转换成Optional时不需要ofNullable()——简单的of()就可以了。

【讨论】:

    【解决方案2】:

    使用 orElse like

        Set<String> result = Optional.ofNullable(method1())
                        .map(x -> x.get("A"))
                        .map(y -> y.get("B"))
                        .orElse(null);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多