加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在Scala中,如何解决TraversableLike.toIterator的低效中间流

发布时间:2020-12-16 18:32:28 所属栏目:安全 来源:网络整理
导读:(Gen)TraversableOnce.toIterator在TraversableLike中被重写为toStream.iterator,导致出现中间流. 举一个简单的例子,假设我正在尝试实现一个简单的izip实用程序,它总是在调用zip之前强制它的迭代器参数,以便在两个集合中产生一个有效的迭代器. 以下是低效的(
(Gen)TraversableOnce.toIterator在TraversableLike中被重写为toStream.iterator,导致出现中间流.

举一个简单的例子,假设我正在尝试实现一个简单的izip实用程序,它总是在调用zip之前强制它的迭代器参数,以便在两个集合中产生一个有效的迭代器.

以下是低效的(由于中间流):

def izip[A,B](xs: TraversableOnce[A],ys: TraversableOnce[B]) =
  xs.toIterator zip ys.toIterator

并且必须扩展到:

def izip[A,B](xs: Iterable[A],ys: Iterable[B]) =
  xs.iterator zip ys.iterator
def izip[A,B](xs: Iterator[A],ys: Iterable[B]) =
  xs zip ys.iterator
def izip[A,ys: Iterator[B]) =
  xs.iterator zip ys
def izip[A,ys: Iterator[B]) =
  xs zip ys
// .. and more needed to handle Traversables as well

有没有更好的办法?

解决方法

我认为特征只保证给定方法的存在,而不是它的实现.它们可以提供默认实现,但子类型可以覆盖它.

因此,即使TraversableLike为toIterator提供了实现,也将使用您传递的对象的实际实现.

如果您对标准集合存在性能问题,那么真正的问题可能在其他地方.如果它是自定义集合,您应该使用合理的定义覆盖toIterator.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读