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

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循环太多了! (我主要是在开玩笑,但认真的是...)



从下面的注释中获得更多信息,我已经修改了您的代码以实现我的建议。为了将项目添加到temp(而不是删除它们),我不得不将您的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;
}

08-06 11:05