Kotlin-只能读取文件中的前n行

时间:2018-10-13 17:00:23

标签: kotlin

有没有一种方法可以解决BufferedReader读取的行数,而无需解决类似于Java的传统for循环?

以下面的代码为例:

bufferedReader.useLines { it }
            .take(10)
            .toList()

useLines的文档说明:

  

调用[block]回调,为该文件中的所有行提供序列,并关闭阅读器一次    *处理完成。

据我了解,这意味着将读取整个文件,然后才从序列中过滤掉前十个文件。除了只获取第一行之外,我找不到任何在线解决此问题的方法。

1 个答案:

答案 0 :(得分:5)

Sequence是一个延迟评估的集合。这意味着将仅处理必要的项目,因此,如果您take(10),将仅处理前10行。

因此,文档中的关键字为:

  

调用[block]回调,为其中的所有行提供序列   此文件并在处理完成后关闭阅读器。

现在useLines会在其源代码块完成后立即关闭源代码,从而使您的代码不正确。而是使用以下命令:

val list : List<String> = bufferedReader
    .useLines { lines: Sequence<String> ->
        lines
            .take(10)
            .toList()
    }