Лучший способ использования BufferedReader в Котлине

Поэтому я только начал использовать Kotlin для Android (в надежде, что это тоже поможет мне с Swift), и превратил мои коды Java Java в Kotlin.

В одном из преобразований я наткнулся на BufferedReader, который я обычно пишу на Java (или, скорее, на C #) следующим образом:

String result = ""; String line = ""; BufferedReader reader = new BufferedReader(someStream); while ( (line = reader.readLine()) != null ) { result += line; } 

Но в Котлине кажется, что Котлин не позволяет мне присваивать значения переменным в условиях.

В настоящее время я написал код следующим образом:

 val reader = BufferedReader(someStream) var line : String? = "" while (line != null) { line = reader.readLine() result += line } 

которые я не нахожу столь изящными (и пред-gen, несмотря на использование Kotlin).

Какой был бы лучший способ использовать BufferedReader в Котлине?

Вы можете использовать bufferedReader так

 val allText = inputStream.bufferedReader().use(BufferedReader::readText) 

Если вы все еще хотите прочитать его по очереди, вы можете использовать некоторые функции расширения из std lib и сделать это следующим образом:

 val reader = someStream.bufferedReader() val iterator = reader.linesSequences().iterator() while(iterator.hasNext()) { val line = iterator.next() // do something with line... } reader.close() 

или, альтернативно, с использованием «функционального» подхода:

 val reader = someStream.bufferedReader() reader.useLines { it.map { line -> // do something with line } } 

используя useLines, вам не нужно явно закрывать читателя, функция extensionLines будет делать это за вас!

Просто добавьте их для справки .. cheers

Intereting Posts