尝试从ArrayList <object> </object>中删除元素时的NPE

时间:2014-08-25 11:57:17

标签: java arraylist

我有一个对象的arrayList,每个对象都有一个字符串成员列表。

我试图遍历列表并删除列表中具有null的特定元素(状态)的任何成员。

对象元素在其构造函数中设置为null,如果未填充则保持为null。我无法理解为什么我会获得NPE。我已经调试了它,我可以逐步完成循环并查看每个元素及其成员,但是一旦我点击了某个元素的成员状态&#34;状态&#34;是的,我得到了NPE。

任何帮助表示感谢。

    public ArrayList<FlightObject> processResults(ArrayList<FlightObject> list) {
    for (int i = 0; i< list.size(); i++) {
        if (list.get(i).status.toString() == null) {
            list.remove(i);

        }
    }
    return list;
}

3 个答案:

答案 0 :(得分:4)

我想NPE问题可以通过像if (list.get(i).status == null)这样的简单空值检查来解决,但是一旦你纠正了这个问题,你就会遇到另一个问题。更改实际遍历的列表是一个坏主意,因为您可能会错过某些情况,因为您将跳过某些元素(&#34;您更改索引&#34;)。要正确地做到这一点,你需要和像这样的迭代器:

public ArrayList<FlightObject> processResults(ArrayList<FlightObject> list) {
    for (Iterator<FlightObject> iter = list.iterator(); iter.hasNext();) {
        FlightObject fo = iter.next();   
        if (fo.status == null) {
            iter.remove();            
        }
    }
    return list;
}

答案 1 :(得分:3)

list.get(i).statusnull时,在其上调用任何方法都会抛出NullPointerException

支票应该只是if (list.get(i).status == null) {

答案 2 :(得分:0)

        public ArrayList<FlightObject> processResults(ArrayList<FlightObject> list) {
        for (int i = 0; i< list.size(); i++) {
            if (list.get(i)!=null && list.get(i).status!= null){
                list.remove(i);    
            }
          }
        }
        return list;
    }