使大对象变得可迭代

时间:2020-07-13 14:09:40

标签: java loops iterator

我有50个文件,每个文件大小为100MB。

每个文件在我的代码中都有一个类表示形式,例如:

public class FileRepresentation
{
    private String path;

    public FileRepresentation(String path)
    {
        this.path = path;
    }

    public String getPath()
    {
        return this.path;
    }
}

出于明显的原因,我在循环访问时无法在内存中拥有50个对象(每个对象100MB)。

我有一个类,该类保存所有文件目录的路径,并且我想使此类可迭代,并且能够一次返回1个对象,这意味着来自Iterator(循环)的每个请求,创建一个新对象并返回它。

public class FilesClass
{
    private String folderPath;

    public FilesClass(String folderPath)
    {
        this.folderPath= folderPath;
    }

    //What I want to achieve:
    public FileRepresentation getNextFile()
    {
        return new FileRepresentation("nextFile");
    }
}

我曾考虑过要拥有一个计数器,并且每次迭代都只是创建一个新对象,但这似乎是错误的。 我该如何实现?有什么更好的方法吗?也许我弄错了,在循环中并不是所有的50个对象都在内存中?

谢谢。

编辑: 我最终做了建议的方法。

1 个答案:

答案 0 :(得分:0)

我最终使用了循环程序的方法:

public class FileRepresentation
{
    private String path;

    public FileRepresentation(String path)
    {
        this.path = path;
    }

    public String getPath()
    {
        return this.path;
    }
}
public class FilesClass
{

    private List<File> files;

    private int counter;

    public FilesClass(List<File> files)
    {
        this.files = files;
        this.counter = 0;
    }

    public FileRepresentation getNextFile()
    {
        FileRepresentation object = myOwnImplementationToConvertFileToObject(this.files.get(counter++));
        return object;
    }
}