私はちょうどAndroid用のKotlinを使い始めました(それはSwiftにも役立つことを期待しています)。そしてAndroid JavaコードをKotlinに変換しました。変換の一つでKotlinでBufferedReaderを使用する最善の方法
は、私は次のように私は、通常のJavaで書く(というかC#)となりBufferedReaderの、つまずい:
String result = "";
String line = "";
BufferedReader reader = new BufferedReader(someStream);
while ((line = reader.readLine()) != null) {
result += line;
}
しかしKotlinで、Kotlinにはないようですwhile条件で変数に値を割り当てることができます。 (Kotlinを使用しているにもかかわらず、とPREV-GEN)
val reader = BufferedReader(someStream)
var line : String? = ""
while (line != null) {
line = reader.readLine()
result += line
}
私はとてもエレガントを見つけることができません:
現在、私は次のようにコードを書いています。
KotlinでBufferedReaderを使用するにはどうすればよいでしょうか?
val reader = someStream.bufferedReader()
val iterator = reader.linesSequences().iterator()
while(iterator.hasNext()) {
val line = iterator.next()
// do something with line...
}
reader.close()
かを次のように
このような文字列を連結しないでください。 'StringBuilder.append()'を使用してください。パフォーマンスの問題があります – rafid059
@ rafid059本当ですか?私は、Javaコンパイラ(とKotlinコンパイラ)がループ内の文字列連結を最適化すると考えました。 –
はい、Javaコンパイラは+ =文字列concatをStringBuilder操作に変換しますが、ここではループ内にあり、コンパイラはループ部分を最適化できません。 'javap -c Main.class'を使用してこのコードを解読すると、ループ内にStringBuilderインスタンスが表示されます。しかし、新しいstringbuilderが毎回最新の 'result'で作成され、' line'が追加されます。 ** TLDR; **コンパイラは単純なfor-loop文字列連結を最適化できません – rafid059