Итерирование по файлам, разбиение по шаблону

Я пытаюсь обернуть голову обработкой потока файлов. Получил ввод, выглядящий следующим образом:

bla blubb blubber testcode 

Существует несколько файлов, похожих на выше. Прямо сейчас, я использую один файловый подход, который считывает весь файл в память и разбивает его:

 Files.newBufferedReader("myfile").use { f -> f.readText().splitToSequence("\n\n").forEach { // do my stuff } } 

Теперь я пытаюсь обобщить это на более крупные входы (что делает невозможным хранить файл в памяти) и несколько файлов. В идеале я бы рассматривал целый каталог входных файлов как один поток строк, которые я разделял на \n\n и работал над частями. Как мне это сделать?

Вы можете читать файл как последовательность текстовых строк, а затем перегруппировать эти строки, используя пустую строку в качестве разделителя:

 File("myfile").useLines { lines -> val lineBlocks: Sequence<List<String>> = buildSequence { val block = mutableListOf<String>() for (line in lines) { when { line.isNotEmpty() -> block.add(line) block.isNotEmpty() -> { yield(block.toList()) block.clear() } } } if (block.isNotEmpty()) yield(block.toList()) } lineBlocks.forEach { println(it.joinToString()) } } 

Здесь вы получаете результат в lineBlocks , который представляет собой последовательность, в которой каждый элемент представляет собой список строк в одном блоке.