Удаление массива строк из ArrayList с помощью итератора

#java #if-statement #arraylist #while-loop #iterator

#java #if-оператор #arraylist #цикл while #итератор

Вопрос:

Я пытаюсь удалить данный String массив из ArrayList с помощью Iterator . для списка заданных приложений. Я использую свой class book в качестве ресурса для этого, но я не понимаю, почему я получаю ошибку cannot find symbol - method iterator(); . Должен ли я использовать Iterator для удаления заданного String из моего ArrayList ? Или есть лучший цикл, который я должен использовать?

Заранее большое спасибо.

     public void removeApp(String name)
{
    Iterator<App> it = name.iterator(); 
    while(it.hasNext()) {
        App app = it.next();
        String appName = app.getName();
        if (appName.equals(name)) {
            it.remove();
            System.out.println(appName   "has been removed.");
        }
    }
    System.out.println("Can't find app. Please try again.");
}
  

Комментарии:

1. @AnuragSrivastava Это, похоже, совершенно иная проблема, чем этот вопрос.

Ответ №1:

Это потому, что параметр name является строкой, и вы можете вызывать .iterator() только объекты, которые реализуют Iterable :

 name.iterator(); // here is the error
  

Пожалуйста, обратитесь к документации для получения более подробной информации (и реализаций).

Ответ №2:

Должен ли я использовать итератор для удаления заданной строки из моего ArrayList? Или есть лучший цикл, который я должен использовать?

цикл for / foreach в Iterable (реализацией которого является ArrayList) не предназначен для удаления элементов во время итерации. Ваш подход с Iterator является правильным.

Вы можете сделать таким образом :

 List<App> list = ...;
for(Iterator<App> it = list.iterator(); it.hasNext(); ) {
    App app = it.next();
    String appName = app.getName();
    if (appName.equals(name)) {
        it.remove();
        System.out.println(appName   "has been removed.");
    }
}
  

Или в качестве альтернативы вы можете использовать List.removeIf() такие :

 List<App> list = ...;
list.removeIf(app -> app.getName().equals(name));
  

Ответ №3:

Вы вызываете .iterator() свой параметр name, а не список приложений.

Кроме того, вы должны return сразу после удаления приложения (после it.remove(); System.out.println(appName "has been removed."); ), иначе вы всегда будете печатать «Не удается найти приложение. Пожалуйста, попробуйте еще раз «. (если только у вас не может быть разных объектов приложения с одинаковыми именами).