Java 如果hashmap中的arraylist为空?

Java 如果hashmap中的arraylist为空?,java,nullpointerexception,hashmap,Java,Nullpointerexception,Hashmap,我有三个HashMap,其中两个有多个值(ArrayList) Map advice=newhashmap(); Map teach=newhashmap(); Map takesCo=newhashmap(); //ArrayList课程=新建ArrayList; 我想根据第一个hashmap(advice)的键对它们进行迭代 数组列表包含课程名称,我希望在匹配时打印 for (String x : advise.keySet()) { String y = advise.get(

我有三个HashMap,其中两个有多个值(ArrayList)

Map advice=newhashmap();
Map teach=newhashmap();
Map takesCo=newhashmap();
//ArrayList课程=新建ArrayList;
我想根据第一个hashmap(advice)的键对它们进行迭代 数组列表包含课程名称,我希望在匹配时打印

for (String x : advise.keySet()) { 
    String y = advise.get(x);
    ArrayList<String> z1values = teach.get(y) ;
    ArrayList<String> z2values = takesCo.get(x) ;
    if (!z1values.isEmpty() && !z2values.isEmpty()){
    for (String z1:z1values){
        for (String z2:z2values){
            if (z1.equals(z2)){
                result=x+","+y+","+z1;
                system.out.println(result);
                }
            }
        }
    }
}
for(字符串x:advice.keySet()){
字符串y=advision.get(x);
ArrayList z1values=teach.get(y);
arraylistz2values=takesCo.get(x);
如果(!z1values.isEmpty()&&!z2values.isEmpty()){
用于(字符串z1:z1值){
用于(字符串z2:z2值){
如果(z1等于(z2)){
结果=x+”,“+y+”,“+z1;
系统输出打印项次(结果);
}
}
}
}
}

我得到的
nullPointerException
与if语句一致

只需从

!z1values.isEmpty() && !z2values.isEmpty()


您是否尝试过在IDE中调试?生成的异常跟踪将告诉您什么是null以及可以采取什么措施来避免这种情况。在第一条if语句中,您正在对null对象(z1values.isEmpty())调用一个方法。在调用之前,您需要确保z1values不为null,以确定列表是否为空。“使用if语句”在这段代码中有两个值:具体说明您所指的值(例如“第一个if语句”);或者省略不相关的代码。答案很好,快速正确!我试过“Z1价值观”=null&&Z2值!=空“单独和”!z1values.isEmpty()&&!z2values.isEmpty()以前单独使用,但不起作用。两者之间的区别是什么?isEmpty()检查数组列表的大小是否为0。。但如果在列表为null时调用此函数,则会抛出NullPointerException。这就是为什么在调用此函数之前,您需要确保列表不为null。另一种方法(至少对于Java 8+,并且假设您不是有意插入null值)是使用
teach.getOrDefault(y,Collections.emptyList())
:然后您会得到一个空列表而不是null,因此不需要进行null检查。同样,检查列表是否为空也是不必要的,因为您不会对空列表执行任何操作。
!z1values.isEmpty() && !z2values.isEmpty()
z1values != null && z2Values != null && !z1values.isEmpty() && !z2values.isEmpty()