Делаем большой объект повторяемым - PullRequest
0 голосов
/ 13 июля 2020

У меня 50 файлов, каждый размером 100 МБ.

Каждый файл имеет представление класса в моем коде, например:

public class FileRepresentation
{
    private String path;

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

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

По очевидным причинам я не могу 50 объектов, каждый по 100 МБ в моей памяти, пока я oop просматриваю его.

У меня есть класс, который содержит путь к каталогу всех файлов, и я хотел бы сделать этот класс Iterable, и может возвращать 1 объект за раз, то есть каждый запрос от Iterator (l oop), он создает новый объект и возвращает его.

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 объектов находятся в памяти, пока находится в l oop?

Спасибо.

РЕДАКТИРОВАТЬ: В итоге я создал свой предложенный метод.

1 Ответ

0 голосов
/ 23 июля 2020

В итоге я использовал свой метод петлителя:

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