0

我似乎只能迭代结果 val 一次。调用 length 会对其进行迭代,因此调用result.next会导致异常。

    val result = for ( regex(name) <- regex findAllIn output) yield name
    println(result.length)
    println(result.next)

结果是 AFAIK 一个 Iterator[String],所以我不确定为什么我只能迭代一次。

4

2 回答 2

2

您可以尝试在其上调用类似toVector的东西,以便将其存储在一个持久集合中,然后您可以根据需要多次迭代它。

Iterator只会让您遍历内容一次,因此如果您想多次遍历它,请将其变成一个集合。鉴于你有一个Iterator[String],调用类似的东西.toVector会给你一个Vector[String].

于 2013-02-08T21:00:47.873 回答
2

结果是 AFAIK 一个 Iterator[String],所以我不确定为什么我只能迭代一次。

因为这就是Iterators 的工作方式。您无法返回或重置它们 - 一旦您遍历它们,它们就会“用完”。

一种解决方法是将结果转换为例如 a List,它没有这样的限制:

val result = (for ( regex(name) <- regex findAllIn output) yield name).toList
println(result.length)
println(result.head)
于 2013-02-08T21:01:20.643 回答