Удаление массива String из ArrayList с помощью итератора - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь удалить данный массив String из ArrayList, используя Iterator.для списка заданных приложений.Я использую мою учебную книгу в качестве ресурса для этого, но я не понимаю, почему я получаю ошибку 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.");
}

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

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

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

0 голосов
/ 04 марта 2019

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

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

Вы можете сделать это следующим образом:

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));
0 голосов
/ 04 марта 2019

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

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

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

...