Java 链接映射方法并使用可选的

Java chaining map methods and using optional

我正在使用 Java 8 method1() -> returns a 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")) 但是此代码 return 和 Optional 我需要 return 和 Set<String>.
我如何转换它,如果是 null(在 get 方法 returns null 的情况下)如何 returns null?

提前致谢。

像这样使用 orElse

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

通过 gamgoon 稍微润色代码:

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

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

[]

您可能认识到打印空 collection 的结果。在你想要 collection 的地方,你不应该接受 null。使用空 collection 表示没有元素。同样,我假设您的 method1() 可能 return 是一张空地图而不是 null。所以我们在转换成 Optional 时不需要 ofNullable()——简单的 of() 就可以了。