【问题标题】:Tail on scala iteratorscala迭代器上的尾巴
【发布时间】:2016-12-23 15:45:09
【问题描述】:

我想检查文件中的每一行,除了第一个标题行,都包含字符串“14022015”。我想用 Scala 的方式来做这件事,我想出了一些聪明的东西(我想)使用foldLeft

assert(Source.fromFile(new File(s"$outputDir${File.separator}priv.txt"))
  .getLines().foldLeft(true)((bool, line) => (bool && line.contains("14022015"))))

直到我发现需要从测试中排除的标题行。由于 getLines 返回 Iterator 而不是 List,tail 将不起作用。我还能做些什么(Scala 明智)?

【问题讨论】:

    标签: scala


    【解决方案1】:

    简单地说:

    val res: Boolean = myFile.getLines.drop(1).forall(_.contains("14022015"))
    

    【讨论】:

      【解决方案2】:

      iterator.drop(1) 将帮助您实现所需的目标

      UPD:附带说明,在这种情况下,请考虑使用递归解决方案而不是 fold - fold 将始终扫描整个迭代器,并且根据您的代码,您可能希望它短路,就像标准的a && b && c 不会在遇到false 时立即评估列表中的表达式

      【讨论】:

        猜你喜欢
        • 2013-02-14
        • 1970-01-01
        • 2021-02-12
        • 2017-07-13
        • 1970-01-01
        • 2012-03-08
        • 2013-04-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多