栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

使用iterator的注意点

使用iterator的注意点

  iterator是我们编程中经常使用的,我们都知道在取迭代器中的元素时,是通过改变指针的位置来获取到元素,而指针位置如果发生变化,就无法在获取到上一个指针位置的元素, 而iterator的某些方法也同样是遍历所有的元素,即指针的位置会移位到最后.我在使用的时候就遇到了这个问题,也是对迭代器的了解不够多,这里就以我遇到的问题举个例子.
  我是编写spark core数据处理流程,以数据表中的xid最为分组,返回的数据形式为tuple2,第一个位置就是xid,第二个位置就是iterator,iterator中的每一个字符串对应数据表中的一行数据,如果该xid对应的数据行数不足6行我需要进行一种处理,大于6行的进行另一种逻辑处理,这里的时候我就对terator的长度进行了判断,结果就是判断完成,却拿不到数据.

这里以简单的代码为例子

    val it = ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9).iterator
    if (it.size > 5) {
      println("已经满足判断条件")
      val buffer = it.toBuffer
      println("===== " + buffer + " =======")
    }

通过以上代码可以看到iterator的长度实际为9,满足if的判断条件,但是当我控制台打印it.toBuffer时,结果如下

可以看到,实际已经进入到了if的执行逻辑里面,但是打印出来的ArrayBuffer是空的.这就是因为当我调用了iterator.size的方法后,iterator的指针已经就移位到了最后,所以当iterator.toBuffer的时候并没有实际的数据,所以我们在使用iterator的时候一定要注意这一点,碰到类似的问题我们可以先iterator的数据转成list或者array都可以,然后在进行判断.

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/674255.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号