从ArrayList中删除所有null使用Iterator的remove()方法

时间:2018-04-02 10:37:45

标签: java arraylist collections iterator cursor

我是Java新手。我只是在Collection Framework中寻找Iterator。 但现在我想通过使用Iterator的remove()方法从ArrayList中删除所有null。所以尝试了下面的代码,但我没有得到预期的输出,因为我想要一个没有任何空值的列表。请解释一下谢谢你。

  

这是我的代码

package setinterface;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

public class InternalWorkingOfArrayList {

    public static void main(String[] args) {

        List<String> setOfString = new ArrayList<String>();
        setOfString.add("A");
        setOfString.add("B");
        setOfString.add("C");
        setOfString.add("B");
        setOfString.add(null);
        setOfString.add("A");
        setOfString.add(null);


        Iterator<String> iterator = setOfString.iterator();
        while (iterator.hasNext()) {
            String string = (String) iterator.next();
            if (null==string) {
                iterator.remove();
                break;
            }   
        }
        for (String string1 : setOfString) {
            System.out.println(string1);
        }
    }
}

3 个答案:

答案 0 :(得分:5)

你为什么要打破循环?从代码中删除 break 语句。

while (iterator.hasNext()) {
            String string = (String) iterator.next();
            if (null==string) {
                iterator.remove();
                //break;
            }   
        }

答案 1 :(得分:2)

你在做错的是你直接尝试将元素转换为字符串。这会给你一个null元素的例外。

这是你可以做的准确。

package setinterface;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

public class InternalWorkingOfArrayList {

    public static void main(String[] args) {

        List<String> setOfString = new ArrayList<String>();
        setOfString.add("A");
        setOfString.add("B");
        setOfString.add("C");
        setOfString.add("B");
        setOfString.add(null);
        setOfString.add("A");
        setOfString.add(null);


        Iterator<String> iterator = setOfString.iterator();
        while (iterator.hasNext()) {
            if (null==iterator.next()) {
                iterator.remove();
            }   
        }
        for (String string1 : setOfString) {
            System.out.println(string1);
        }
    }
}

答案 2 :(得分:2)

使用 Java-8 功能,您可以通过以下方式使用一行代码实现...

setOfString.removeAll(Collections.singleton(null));

然后打印输出:

System.out.println(setOfString); //output would be: [A, B, C, B, A]