【问题标题】:Remove All null from ArrayList Using Iterator's remove() method使用迭代器的 remove() 方法从 ArrayList 中删除所有 null
【发布时间】:2018-09-11 13:47:59
【问题描述】:

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

这是我的代码

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);
        }
    }
}

【问题讨论】:

标签: java arraylist collections iterator cursor


【解决方案1】:

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

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

【讨论】:

  • 也不需要投射
【解决方案2】:

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

这正是你可以做到的。

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);
        }
    }
}

【讨论】:

    【解决方案3】:

    使用Java-8的特性,你可以通过以下方式用一行代码实现它...

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

    然后打印输出:

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

    【讨论】:

    • 或者更好setOfString.removeIf(s -&gt; s == null);,或者有方法参考:setOfString.removeIf(Objects::isNull);
    猜你喜欢
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2019-07-26
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    相关资源
    最近更新 更多