Перезапустите ArrayList в For-Loop - PullRequest
0 голосов
/ 28 октября 2018

Я сделаю это просто: у меня есть ArrayList имен, я должен удалить определенные слова, которые содержат определенную букву, но у меня возникают проблемы при перезапуске цикла for.Вот что я получил:

public static void someRandomFunction(){
    List<String> arrList = new ArrayList<>(Arrays.asList("Hello",
                                                     "Everyone",
                                                     "I'm",
                                                     "Struggling",
                                                     "In",
                                                     "Computer",
                                                     "Science"));

    System.out.println("Start of List: " + wordList + "\n"); 
    System.out.println("\nDrop: \"a\""); 
    someRandomFunction(wordList, "a");
    System.out.println("wordList is now: " + wordList);
}

public static List<String> removeIfContains(List<String> strList, String removeIf){

    List<String> tempList = new ArrayList<>(strList); // creating a copy

    for(int i = 0; i < tempList.size(); i++){
        if(tempList.get(i).contains(removeIf))
            tempList.remove(i);
    }

//Return will not work because of incompatible types.
}

Пример того, каким должен быть скомпилированный код:

ArrayList [Здравствуйте, все, я, я изо всех сил, In,Компьютер, Наука]

Удалить слова, начинающиеся с буквы «А»:

Новый ArrayList [Привет, Все, я борюсь, В, Компьютер, Наука]

Удалите слова, начинающиеся с «I»:

Новый ArrayList [Привет, Всем, Я борюсь, Компьютер, Наука]

Проблема с моим кодом состоит в том, что он не будетверните список слов в прежнее состояние, когда он начинает читать новое слово, которое нужно отбросить.

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Я верю, что это то, что вы ищете.Я не уверен, если вы хотите экземпляр или статический метод.Я считаю, что ваша проблема в том, что вы не создаете копию.Я отметил, где я создавал копию.Удачи в CS ... мы все боролись в одной точке.

public static void someRandomFunction(){
    List<String> arrList = new ArrayList<>(Arrays.asList("Hello",
                                                         "Everyone",
                                                         "I'm",
                                                         "Struggling",
                                                         "In",
                                                         "Computer",
                                                         "Science"));

    System.out.println(removeIfContains(arrList, "H")); // calling the function and passing the list and what
    System.out.println(removeIfContains(arrList, "I")); // I want to remove from the list
}

public static List<String> removeIfContains(List<String> strList, String removeIf){
    List<String> tempList = new ArrayList<>(strList); // creating a copy

    for(int i = 0; i < tempList.size(); i++){
        if(tempList.get(i).contains(removeIf))
            tempList.remove(i);
    }

    return tempList; // returning the copy
}
0 голосов
/ 28 октября 2018

Если вы просто хотите удалить каждый элемент в ArrayList, который начинается с определенной буквы, вы можете использовать метод removeIf(), который:

Удаляет все элементы этой коллекции, которые удовлетворяют данному предикату.

wrodList.removeIf(e -> e.contains(thisLetter));

(требуется Java 8+)

Похоже, вы хотите, чтобы список сбрасывался после каждого удаления элементов. Для этого вы можете создать копию ArrayList для проверки, а затем после каждого раза возвращать ее к оригиналу:

List<String> copy = new ArrayList<>(wordList); //Creates a copy of wordList
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...