简体   繁体   English

使用普通旧方法从 java 中的 Arraylist 中删除 null 值

[英]Remove null values from Arraylist in java using normal old method

I am trying to remove null and empty value from a Arraylist, but the following code does not work, when i tried to use if(null,=a) if throwing the Nullpointer Exception, but other way works then if(a==null).我正在尝试从 Arraylist 中删除 null 和空值,但是当我尝试使用 if(null,=a) 如果抛出 Nullpointer 异常时,以下代码不起作用,但其他方法则有效)。 Program 1 gives error but program 2 works.程序 1 出错,但程序 2 有效。

Can Someone Please explain the reason谁能解释一下原因

public class RemoveNull {
public static void main(String[] args) {




List<String> arr=new ArrayList<String>();
arr.add("a");
arr.add("a");
arr.add("a");
arr.add("a");
arr.add(null);
arr.add("a");
arr.add("a");
arr.add(null);

List<String> arr1=new ArrayList<String>();
System.out.println(arr);
for(String a:arr)

{
    System.out.println(a);
    if(null!=a || !a.equals(""))
    {
        arr1.add(a);
        //arr.remove(a);
    }
    System.out.println(arr1);
}

System.out.println(arr);

} }

results结果

Exception in thread "main" java.lang.NullPointerException at RemoveNull.main(RemoveNull.java:26) RemoveNull.main 处的线程“主”java.lang.NullPointerException 异常(RemoveNull.java:26)

public class RemoveNull {

    public static void main(String[] args) {


        ArrayList<String> arr=new ArrayList<String>();
        arr.add("a");
        arr.add("a");
        arr.add("a");
        arr.add("a");
        arr.add(null);
        arr.add("a");
        arr.add("a");
        arr.add("");
        arr.add(null);
        arr.add("");
        List<String> arr1=new ArrayList<String>();
        System.out.println(arr);
        for(String a:arr)

        {
            System.out.println(a);
            if(null==a || a.equals(""))
            {

            }
            else
            {
                arr1.add(a);
                //arr.remove(a);
            }
            System.out.println(arr1);
        }
        System.out.println(arr);

    }

}

results结果

[a, a, a, a, null, a, a, null, null] [a, a, a, a, a, a] [a,a,a,a,null,a,a,null,空] [a,a,a,a,a,a]

Your problem is here:你的问题在这里:

if(null!=a || !a.equals(""))

You should write你应该写

if(null!=a && !a.equals(""))

You should be using a ListIterator if you want to also possibly remove elements while iterating your list:如果您还想在迭代列表时删除元素,则应该使用ListIterator

ListIterator<String> its = arr.listIterator();
while (itr.hasNext()) {
    String next = itr.next();
    if (next == null || "".equals(next)) {
        itr.remove();
    }
}

Note that you don't need to make a separate updated copy of your list.请注意,您不需要单独制作列表的更新副本。 Instead, you may just iterate the one you already have and remove the null/empty elements.相反,您可以只迭代已有的元素并删除 null/empty 元素。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM