Scala for循环遍历元组集合后集合变空无输出如何解决
问题原因
你调用的combinations方法返回的类型是Iterator[List[Int]],迭代器是只能遍历一次的消耗型资源,只要调用过遍历类方法(包括size、foreach等),遍历结束后迭代器就会被清空,无法重复读取。
你的代码执行顺序实际上是:
- 第一次执行
println(params.size)时,就已经遍历了整个迭代器计算长度,执行完成后迭代器已经为空 - 后续for循环遍历的是空迭代器,自然没有任何输出
- 最后再次调用
params.size,空迭代器的长度就是0
修复方案
如果需要多次使用组合结果,把迭代器转换为普通的持久化集合缓存结果即可,比如转成List:
val primes = List(11, 13, 17, 19, 2, 3, 5, 7) val params = primes.combinations(2).toList // 加toList转成普通集合 println(params.size) for (param <- params) { print(param(0), param(1)) } println(params.size)
修改后两次打印的size都会是28,for循环也会正常输出所有元素。
内容的提问来源于stack exchange,提问作者super_nova_Utah
相关产品推荐
相关产品推荐

