Удаление строки в файле CSV - PullRequest
0 голосов
/ 01 марта 2020

Я создал ArrayList с именем entryList. Метод, который я пытаюсь создать, заключается в том, что если вы напишите removeAllByDate() и введете дату, вся строка с этой датой должна быть удалена. В свою очередь entryList состоит из записей (строк), и я также создал метод getDate(). Я думал написать что-то вроде этого:

public void removeAllByDate(String datum) {
    for(Entry entry: entryList) {
        if (entry.getDate().contains(datum)) {
            entryList.remove(entry);
        }
    }
}

Кто-нибудь видит, почему это не работает?

Ответы [ 2 ]

1 голос
/ 01 марта 2020

Начиная с Java 8, метод, который используется при условном удалении элементов из Collection, равен removeIf(). Ваш код будет таким простым:

entryList.removeIf(entry -> entry.getDate().contains(datum));

Исходный код не работает, так как удаление элементов не допускается при итерации по коллекции, см. Этот вопрос и ответы .

0 голосов
/ 01 марта 2020

Nickewas, вы не очень откровенны с информацией:
- есть как минимум 2 разных ArrayLists (например, java .util.ArrayList & java .util.Arrays.ArrayList)
- Вы не упоминаете , как это не работает!

Возможно, это связано со следующим:
for-each-l oop использует Iterator предоставлено вашим Iterable (entryList).
Может быть, entryList.remove(entry) имеет побочный эффект на Iterable?

Может быть, это или его разновидность это сделает?

entryList.stream()
    .filter (entry -> entry.contains  (datum))  // Creates filtered Stream which...
    .forEach(entry -> entryList.remove(entry)); // ...maybe removes side-effect?

Если нет, вам, возможно, придется использовать Collector и перебрать получившийся List.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...