我创建了一个名为ArrayList
的entryList
。我尝试创建的方法是,如果您输入removeAllByDate()
并输入日期,则应删除带有该日期的整行。的entryList
依次由条目(行)组成,我还创建了方法getDate()
。我想到写这样的东西:
public void removeAllByDate(String datum) {
for(Entry entry: entryList) {
if (entry.getDate().contains(datum)) {
entryList.remove(entry);
}
}
}
有人看到为什么这不起作用吗?
Nickewas,您对信息不太满意:-至少有2个不同的ArrayList(例如java.util.ArrayList和java.util.Arrays.ArrayList)-您不会提及how无效!
可能与以下有关:for-each循环使用您的Iterator
(entryList)提供的Iterable
。也许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
。
自Java 8起,有条件地从Collection
中删除元素时使用的方法是Collection
。您的代码将如下所示:
removeIf()
原始代码不起作用,因为在迭代集合removeIf()
时不允许删除元素。