val files = new File("data").list() val filtered = files.filter(name => name.contains("txn")) val masterList = new ListBuffer[String] for (file <- filtered) { val lines = Source.fromFile(new File("data\\" + file),"UTF-16").getLines val cleaned = lines.filter(!masterList.contains(_)) println("*" + cleaned.length) cleaned.foreach(println(_)) println("**" + cleaned.length) cleaned.foreach(masterList.append(_)) }
*175 **0
我不明白为什么我的名单消失了
解决方法
clean是一个迭代器.
scala> val cleaned = lines.filter(_!="") cleaned: Iterator[String] = non-empty iterator
分配后,它是非空的. scala中的迭代器是单独使用的 – 一旦你遍历它(例如通过应用长度方法)它变为空:
scala> cleaned.length res0: Int = 13 scala> cleaned.length res1: Int = 0
您可以通过转换为List或Seq(lazy)来修复该行为:
scala> val lines=Source.fromFile("bla.txt").getLines lines: Iterator[String] = non-empty iterator scala> val cleaned = lines.filter(_!="").toSeq cleaned: Seq[String] = Stream(first,?) scala> cleaned.length res4: Int = 13 scala> cleaned.length res5: Int = 13
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。