【发布时间】:2015-06-24 16:15:59
【问题描述】:
我正在与一些使用类似迭代器的功能的 Java 代码进行互操作,并假设您将继续测试它的 .next 是否为空值。我想将其放入不可变的 Scala 数据结构中,以便通过函数式编程对其进行推理。
现在,我正在填充可变数据结构,然后将它们转换为不可变数据结构。我知道有一种更实用的方法可以做到这一点。
如何在不使用中间可变集合的情况下重构以下代码以填充不可变数据结构?
谢谢
{
val sentences = MutableList[Seq[Token]]()
while(this.next() != null){
val sentence = MutableList[Token]()
var token = this.next()
while(token.next != null){
sentence += token
token = token.next
}
sentences += sentence.to[Seq]
}
sentences.to[Seq]
}
【问题讨论】:
-
Iterator 有一个
toList和一个toSeq方法。 -
直接把Java迭代器转成Scala迭代器和
takeWhile(_ != null)不是更简单吗? -
它不是 scala 或 java 迭代器。它们是行为类似于迭代器的自定义 java 类,除了没有
.hasNext—— 你应该检查.next以获取null值。 -
@WalrustheCat 哦,好吧,如果它本身不是迭代器,只是看起来像它的东西,那么我想你的解决方案应该可以工作。您可以创建自己的 Scala 迭代器,并将当前实现作为它的主体,这应该更容易从 Scala 端使用...
-
@PatrykĆwiek 谢谢——无法想象。愿意发表您的评论作为答案吗?
标签: scala iterator immutability