我是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);
}
}
}
答案 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]