在 Java 中从链表中删除所有 false 元素



我有一个鱼数据的链接列表,显示在这里

//create linked list of fish data called fl
LinkedList<FishData> fl = new LinkedList<FishData>();
//Here are a few data items
fl.add(new FishData("American Eel ", 9, "Summer/Spring ", 25 , false));
fl.add(new FishData("Hammerhead Shark ", 0, "All Year ", 36, false));
fl.add(new FishData("Horseshoe Crab ", 7, "All Year except May ", 60, false));
fl.add(new FishData("Haddock ", 18, "All Year ", 0, true));
fl.add(new FishData("Tautog ", 16, "late Spring to end of year ", 3, true));

我必须使用迭代器从此列表中删除所有错误元素并再次打印。 我想我理解它在逻辑上是如何工作的,如果我的数据项仅由布尔值组成,我认为我所做的会起作用,但是我不知道如何只查看元素的布尔字段并在它为假时将其删除。 这就是我尝试并得到类转换异常的方法,我知道这意味着什么,我只是不知道如何解决它。

Iterator itr = fl.iterator();
while (itr.hasNext()) {
boolean w = (boolean) itr.next();
if (w = false)
itr.remove();
}

更新:

所以我编辑了代码,现在我有了这个

Iterator<FishData> itr = fl.iterator();
while (itr.hasNext()) {
FishData b = (FishData) itr.next();
if (!b.w) {
itr.remove();
}
}
for (FishData element : fl) {
System.out.println(element);
}
}

以前我使用它 for 循环来打印整个列表,但是当我现在使用它时,什么都没有打印

itr.next()将返回LinkedList中的下一个元素,这将是一个FishData对象。不能将其强制转换为布尔变量。相反,您希望访问fishData对象的布尔变量。因此,假设您的FishData类有一个someCondition布尔变量,您可以执行以下操作:

while (itr.hasNext()) {
boolean w = itr.next().someCondition;
if (w = false)
itr.remove();
}

或者,如果它是一个private变量并且您有一个 getter 方法:

while (itr.hasNext()) {
boolean w = itr.next().isSomeCondition();
if (w = false)
itr.remove();
}

if(w = false)也不正确。=是赋值运算符。您要么需要做if(w == false),要么需要if(!w)。或者,您可以将其简化为:

while (itr.hasNext()) {
if (!itr.next().isSomeCondition())
itr.remove();
}

此外,您需要创建一个更具体的Iterator

Iterator<FishData> itr = fl.iterator();

相关内容

  • 没有找到相关文章

最新更新