首页 > 解决方案 > 使大对象可迭代

问题描述

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

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

public class FileRepresentation
{
    private String path;

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

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

由于显而易见的原因,当我循环遍历它时,我的内存中不能有 50 个对象,每个 100MB。

我有一个包含所有文件目录路径的类,我想让这个类可迭代,并且一次能够返回 1 个对象,这意味着来自迭代器(循环)的每个请求,它都会创建一个新的对象并返回它。

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 个对象都在循环中的内存中?

谢谢。

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

标签: javaloopsiterator

解决方案


我最终使用了我的 Looper 方法:

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;
    }
}

推荐阅读