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()
就可以了。
我正在使用 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()
就可以了。