Предположим, у меня есть объект электронной таблицы, который состоит из строки Iterator, и каждая строка сама является итератором для ячеек.Я хочу создать функцию, которая принимает итератор электронной таблицы и возвращает итератор для ячеек.
Простейшая версия этого выглядит примерно так:
val sheet: Iterable[Row] = //some way of getting the sheet.
case class SheetCell(rowIndex: Int, colIndex: Int, value: Any)
val itr = Iterator(sheet map {row: Row =>
row map {cell: Cell => SheetCell(row.getRowNum, cell.getColumnIndex, cell)}
})
Однако я также хочу сделать этолениво.Т.е. без чтения всей электронной таблицы в память или обхода итераторов строк / ячеек, и я понимаю, что приведенный выше код не ленив.Я почти уверен, что он пересекает оба итератора строки / ячейки, создает объект List[SheetCell]
в памяти, а затем превращает его в итератор - это плохо.
Как бы я сделал это так, чтобыминимизирует использование ресурсов?Должен ли я использовать представления как-то?Как мне это сделать?
В целом, как мне лениво составлять итераторы?