Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何遍历对象';谁的名单?_Java_Design Patterns_Iterator - Fatal编程技术网

Java 如何遍历对象';谁的名单?

Java 如何遍历对象';谁的名单?,java,design-patterns,iterator,Java,Design Patterns,Iterator,我目前在Java中面临这个问题,假设我有一个类ListOfTasks: public class ListOfTasks { private Point startingPoint; ArrayList<Task> tasks; } 公共类任务列表{ 专用点启动点; 数组列表任务; } 在另一个类中,我想通过调用ListOfTasks直接遍历数组列表任务,而不是先检索任务然后遍历它。如果我理解您的问题,类似的方法应该可以: for(int i=0;ix.findT

我目前在Java中面临这个问题,假设我有一个类
ListOfTasks

public class ListOfTasks {
    private Point startingPoint;
    ArrayList<Task> tasks;
}
公共类任务列表{
专用点启动点;
数组列表任务;
}

在另一个类中,我想通过调用ListOfTasks直接遍历数组列表
任务
,而不是先检索任务然后遍历它。

如果我理解您的问题,类似的方法应该可以:

for(int i=0;i
有很多方法可以做到这一点:--

在ListOfTasks POJO中编写GETTER/SETTER

public class ListOfTasks {
    private Point startingPoint;
    ArrayList<Task> tasks = new  ArrayList<>();

    GETTER/SETTER
}
公共类任务列表{
专用点启动点;
ArrayList tasks=新建ArrayList();
吸气剂/塞特
}
然后

listoftask list=newlistoftask();

对于(inti=0;i您所采用的方法是错误的,因为属性“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);
List List=new ArrayList();
//在这里填充列表。。。
找到的任务=lists.stream().filter(x=>x.findTask()).filter(x=>x!=null.findAny().orElse(null);

只是不要为任务公开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);
}

for(int i=0;i可以通过实现返回数组列表的迭代器来实现:

公共类ListOfTasks实现Iterable{
专用点启动点;
数组列表任务;
公共迭代器迭代器(){
return tasks!=null?tasks.iterator():Collections.emptyIterator();
}
}
然后可以使用for-each进行迭代

listoftask list=newlistoftask();
//添加一些任务等。。。
用于(任务:列表){
//使用任务
}
//或
list.forEach(任务->{
//使用任务
});
for(int i=0 ;i<listOfTasks.size();i++){

    // now access Task like this
    listOfTasks.get(i);
}