Я новичок в Java. Я просто искал итератор в Collection Framework. но теперь я хочу удалить все null из ArrayList с помощью метода Iterator remove (). поэтому попробовал следующий код, но я не получаю ожидаемого результата, так как мне нужен список без каких-либо значений NULL. пожалуйста, объясните кому-нибудь Спасибо.
here is my code
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);
}
}
}
Возможный дубликат Как удалить все нулевые элементы из ArrayList или String Array?




Почему вы нарушаете петлю ?? Удалите из кода инструкцию перерыв.
while (iterator.hasNext()) {
String string = (String) iterator.next();
if (null==string) {
iterator.remove();
//break;
}
}
Нет нужды в кастинге
Что вы здесь делаете неправильно, так это то, что вы напрямую пытаетесь преобразовать свой элемент в строку. Это даст вам исключение для нулевого элемента.
Это то, что вы могли сделать именно так.
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);
}
}
}
Используя функции Ява-8, вы можете добиться этого с помощью одной строки кода следующим образом ...
setOfString.removeAll(Collections.singleton(null));
А затем распечатайте результат:
System.out.println(setOfString); //output would be: [A, B, C, B, A]
Или лучше setOfString.removeIf(s -> s == null);, или со ссылкой на метод: setOfString.removeIf(Objects::isNull);
Почему там разрыв?