Java 映射中的嵌套空检查
我正在从外部服务(具有嵌套映射)中提取映射值。 我想得到一个嵌套在地图下面几层的值,并执行一些操作。 以下方法可行,但有更好的方法吗? 我尝试使用Java 映射中的嵌套空检查,java,dictionary,if-statement,java-8,Java,Dictionary,If Statement,Java 8,我正在从外部服务(具有嵌套映射)中提取映射值。 我想得到一个嵌套在地图下面几层的值,并执行一些操作。 以下方法可行,但有更好的方法吗? 我尝试使用Optional,但我认为在这种情况下不可能,因为我无法传递类似以下内容的方法引用: Optional.ofNullable(map1) .map(Map::get) ...... 以下是我试图用可选或任何其他建议修改的工作示例。请给我一些建议 import org.apache.commons.collections
Optional
,但我认为在这种情况下不可能,因为我无法传递类似以下内容的方法引用:
Optional.ofNullable(map1)
.map(Map::get)
......
以下是我试图用可选或任何其他建议修改的工作示例。请给我一些建议
import org.apache.commons.collections.MapUtils;
public class A{
private void methodA(){
Map<String,Object> map1 = getMap(); // getMap() can return null
if(MapUtils.isNotEmpty(map1)){
Map<String, Map<String, String>> map2 = (Map<String, Map<String, String>>) map1.get("key2");
if(MapUtils.isNotEmpty(map2)){
Map<String, String> map3 = map2.get("key3");
if(MapUtils.isNotEmpty(map3)){
// do something
}
}
}
}
import org.apache.commons.collections.MapUtils;
公共A类{
私有无效方法a(){
Map map1=getMap();//getMap()可以返回null
if(MapUtils.isNotEmpty(map1)){
Map map2=(Map)map1.get(“key2”);
if(MapUtils.isNotEmpty(map2)){
mapMap3=map2.get(“key3”);
if(MapUtils.isNotEmpty(map3)){
//做点什么
}
}
}
}
这是我找到的最接近的答案,但它与地图中的嵌套地图无关。
您可以使用以下链:
Optional.ofNullable(map1)
.map(m -> m.get("key2"))
.map(m -> m.get("key3"))
.ifPresent(el -> {
// do something
});
您是否希望:
Optional.ofNullable(map1)
.map(e -> (Map<String, Map<String, String>>) e.get("key2"))
.map(e -> e.get("key3"))
.ifPresent(e->{
// do something
});
Optional.ofNullable(map1)
.map(e->(map)e.get(“键2”))
.map(e->e.get(“key3”))
.如果存在(e->{
//做点什么
});
所有这些的根本原因-“getMap()可以返回null”。解决这个问题!我可以支持这样一个事实,即有时不可避免地要使用Map
,但将其值进一步投射到Map
是一个非常糟糕的选择。@Naman有什么更好的选择吗?因为它在一个from外部调用中出现,其对象是列表、映射和字符串的各种值.然而,我知道我从初始映射中提取的值是map