gpt4 book ai didi

java - 从 ArrayList 问题中删除项目

转载 作者:行者123 更新时间:2023-12-01 19:04:41 25 4
gpt4 key购买 nike

我正在编写一个类,该类具有从其他类中删除对象的方法。但它工作不正常,输出不正确。请帮助我解决这个问题,有没有更好的解决方案,我认为我的解决方案相当麻烦。这是我的代码:

public List<Task> getTaskDue(){        
List<Task> temp = this.taskCollection;
for (int unit = 0; unit < this.unitCollection.size(); unit++){
for (int j = 0; j < this.unitCollection.get(unit).getAssessmentCollection().size(); j++){
for (int i = 0; i < temp.size(); i++){
if (temp.get(i).getDueDate().compareTo(this.unitCollection.get(unit).getAssessmentCollection().get(j).getDueDate()) > 0)
temp.remove(i);
}
}
}
return temp;
}

更新:我有日记类,其中包含包含截止日期属性的任务类和评估类的列表。我想创建一个方法,通过将日记类中的任务与评估类中的截止日期属性进行比较,返回一个新列表,其中包含过期任务列表。程序编译成功,但如果我想测试列表返回没有任务项,结果不正确,因为没有任务过期。

最佳答案

似乎从列表中“删除”元素并不是您的最终问题。

您说过您希望您的方法返回一个列表,其中包含基于某些条件的taskCollection中的元素。同时,我认为您不想以任何方式销毁或更改 taskCollection。

因此,不要创建 temp 作为对 taskCollection 的引用,而是将其设置为 new ArrayList<Task>()反而。然后将任务添加到您希望最终从方法返回的 temp(新列表)中。

我将就此留下我的建议,因为您的代码示例在孤立的情况下有很多未知因素,这使我无法对您真正需要它做什么进行任何有根据的猜测。

此外,for 循环太多了! (我主要是在开玩笑,但我是认真的......)

<小时/>

根据下面评论中的更多信息,我修改了您的代码以实现我的建议。为了将项目添加到临时(而不是删除它们),我必须将您的 if 语句从 > 0 更改为至<= 0 。另外,您应该从当前评估中获取任务并迭代这些任务,而不是在最内层循环中迭代 taskCollection。

public List<Task> getTaskDue(){     
List<Task> temp = new ArrayList<Task>();

for(int u = 0; u < unitCollection.size(); u++){
Unit unit = unitCollection.get(u);

for (int a = 0; a < unit.getAssessmentCollection().size(); a++){
AssessmentItem assessment = unit.getAssessmentCollection().get(a);

for (int t = 0; t < assessment.getTasks().size(); t++){
Task task = assessment.getTasks().get(t);

if (task.getDueDate().compareTo(assessment.getDueDate()) <= 0){
temp.add(task);
}
}
}
}
return temp;
}

关于java - 从 ArrayList 问题中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10560410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com