Scala中如何向Iterator追加元素?求更简洁的实现方法
给Scala Iterator追加单个元素的简洁方案
嘿,这个场景我太熟了!Scala标准库的Iterator确实没直接提供+方法来追加单个元素,不过有几个更顺手的方案可以解决这个问题,让代码更简洁:
用
Iterator.single()简化++写法
你原来的a ++ Iterator(5)完全可行,但可以换成a ++ Iterator.single(5)——这个写法更语义化,一眼就能看出是追加单个元素,比手动写Iterator(5)更清晰,代码长度也没增加多少。自定义
+方法(完全贴合你的期望)
如果想直接用a + 5这种直观语法,可以通过Scala的隐式类给Iterator扩展一个+方法,完美实现你想要的效果:// 定义隐式扩展类,给Iterator添加+方法 implicit class IteratorOps[A](val iter: Iterator[A]) extends AnyVal { def +(elem: A): Iterator[A] = iter ++ Iterator.single(elem) } // 现在就能像你期望的那样使用了 val a = Iterator(3, 4) val b = a + 5 // b就是Iterator(3,4,5)这里用
AnyVal是为了避免运行时额外的对象开销,更高效。只要把这个隐式类放在作用域内(比如封装到工具类里import,或者直接写在当前代码块),所有Iterator都能用上这个+方法。
重要提醒:Scala的
Iterator是一次性遍历的,不管用哪种方案,原迭代器a在生成新迭代器后就已经被消费了一部分,不能再重复使用哦!比如你在val b = a +5之后再去遍历a,会发现它已经没有元素了。
内容的提问来源于stack exchange,提问作者蘇哲聖
相关产品推荐
相关产品推荐

