Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 映射中的嵌套空检查_Java_Dictionary_If Statement_Java 8 - Fatal编程技术网

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