Обратите внимание, что ваш код чтения (File().bufferedReader().lineSequence()
) уже может быть упрощен до:
File(fname).useLines {
it.flatMap(::transform)
}
Теперь о написании без помещения его в промежуточную переменную ...
File("writeTo").bufferedWriter().use { writer ->
File("readFrom").useLines { lines ->
lines.flatMap(::transform)
.forEach {
writer.appendln(it)
}
}
}
Но я еще не совсем уверен в этом ... Мне не очень нравится ;-)
Мне скорее нравится что-то вроде:
File("readFrom").useLines {
..
}.writeTo("writeTo")
но это не сработает, пока я использую useLines
; -)
Но вот что-то похожее:
File("readFrom").useLines {
it.flatMap(::transform)
.writeTo(File("writeTo"))
}
Но для этого требуется следующая функция расширения:
fun Sequence<String>.writeTo(file: File) {
file.bufferedWriter().use { writer -> forEach { writer.appendln(it) } }
}
С другой стороны ... Я всегда хотел иметь sequence.toFile-writer ;-) уже адаптировал его для использования разделителя в качестве параметра ...