#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.");
), иначе вы всегда будете печатать «Не удается найти приложение. Пожалуйста, попробуйте еще раз «. (если только у вас не может быть разных объектов приложения с одинаковыми именами).