相关疑难解决方法(0)

如何在Scala中复制迭代器?

关于重复

这不是如何克隆迭代器的重复?

请不要盲目关闭这个问题,所谓的重复给出所有的答案不要工作.OP负责另一个问题,显然,答案符合HIS问题,但不是我的问题.

不是每个类似的问题都是重复的,在SE上有"扩展问题"这样的特征,唯一的方法是再次询问同一主题,以获得不同的,有效的答案.

问题

我有迭代器.我想得到它的复制(复制),然后我可以完全独立地继续原始和复制.

重要

通过反射或序列化进行复制是不行的(性能损失).

var list = List(1,2,3,4,5)
var it1 = list.iterator
it1.next()

var it2 = it1   // (*)
it2.next()

println(it1.next())
Run Code Online (Sandbox Code Playgroud)

这将简单地引用it1,因此当改变it1时,it2也会改变,反之亦然.

上面的例子使用List,我目前正在与HashMap斗争,但问题是一般的 - 只是迭代器.

方法#1

如果你编辑行(*)并写:

var it2 = it1.toList.iterator
Run Code Online (Sandbox Code Playgroud)

(这被建议作为链接问题中的解决方案)执行程序时抛出异常.

方法#2

"你拿这份清单......".不,我没有.我没有列表,我有迭代器.一般来说,我不知道任何关于迭代器的基础的集合,我唯一拥有的是迭代器.我必须"分叉"它.

iterator scala

16
推荐指数
3
解决办法
4108
查看次数

标签 统计

iterator ×1

scala ×1