Screaming Loud

日々是精進

fileを開いて指定行数分取得する

fileを開いて、指定行数の分だけ取得するというロジックを作成していたのですが、
そもそもinputが指定行数以上あるかどうかを知りたかったので、そこもうまく取得できるような実装にする必要がありました。

BufferedReaderで最後の値が、nullになるので、null判定を行うことで、実装。

lisp脳なのか、headとtailでばかり考えていたのですが、
initとlastを使えばうまく実装できたので、メモとして。

ちなみに、aの値は以下のようになるのですが、

val a = Stream(1,2,??)

aの値代入が終わったあとでも以下のようにreader.readLine()を呼ぶと、aの値が変わります。

val reader = new Buffered...
val a = Iterator...
println(reader.readLine())
print(a)

なぜかは完全には把握していないのですが、Iteratorが遅延して評価しており、aの値が確定する前にreader.readLine()を読んでしまうのだろうということが仮説です。