【问题标题】:how to iterate through an object's list? [closed]如何遍历对象的列表? [关闭]
【发布时间】:2021-03-02 21:02:44
【问题描述】:
我目前在 Java 中遇到这个问题,假设我有一个类 ListOfTasks:
public class ListOfTasks {
private Point startingPoint;
ArrayList<Task> tasks;
}
在另一个类中,我想通过调用 ListOfTasks 直接遍历数组列表 tasks,而不是先检索任务然后遍历它。
【问题讨论】:
标签:
java
design-patterns
iterator
【解决方案1】:
您可以通过实现Iterable 来返回数组列表的迭代器来做到这一点:
public class ListOfTasks implements Iterable<Task> {
private Point startingPoint;
ArrayList<Task> tasks;
public Iterator<Task> iterator() {
return tasks != null ? tasks.iterator() : Collections.emptyIterator();
}
}
然后您可以使用 for-each 进行迭代
ListOfTasks list = new ListOfTasks();
// add some tasks, etc...
for (Task task : list) {
// use task
}
// or
list.forEach(task -> {
// use task
});
【解决方案2】:
有很多方法可以做到这一点:--
在 ListOfTasks POJO 中写入 GETTER/SETTER。
public class ListOfTasks {
private Point startingPoint;
ArrayList<Task> tasks = new ArrayList<>();
GETTER/SETTER
}
然后
ListOfTasks list = new ListOfTasks();
for(int i=0 ;i<list.getTask().size();i++){
list.getTasks().get(i);
}
【解决方案3】:
如果我理解你的问题,这样的事情应该可以工作:
for (int i = 0; i < listOfTasksObject.tasks.size(); i++) {
Task task = listOfTasksObjects.tasks.get(i);
// Now you can work with task...
}
【解决方案4】:
您采用的方法是错误的,因为“tasks”属性的责任归 ListOfTasks 类所有。
所以你必须改变方法,遍历你在另一个类中的 ListOfTasks 实例集并调用一个方法,比如说
public Task findTask() {
// do something here to find the Task you were looking for, or return null
}
所以其他类应该是这样的:
List<ListOfTasks> lists = new ArrayList<>();
// populate list here ...
Task found = lists.stream().filter(x => x.findTask()).filter(x => x != null).findAny().orElse(null);
【解决方案5】:
只是不要为任务暴露 getter。
在 ListOfTasks 类中创建一个方法,例如:
public Task get(int index){
return list.get(index);
}
public int size(){
return list.size();
}
现在像这样使用 ListOfTasks
for(int i=0 ;i<listOfTasks.size();i++){
// now access Task like this
listOfTasks.get(i);
}