【问题标题】:Is Iterator a collection in Scala?Iterator 是 Scala 中的集合吗?
【发布时间】:2018-06-22 06:20:16
【问题描述】:

我对 Scala 中的 Iterator 感到困惑,它是一个集合还是一种逐个访问集合元素的方法?所以如果它不是一个 Collection 那么我们如何使用 Iterator 作为 Iterator("a", "number", "of", "words") ? 参考 - https://www.tutorialspoint.com/scala/scala_iterators.htm

【问题讨论】:

  • 你如何定义“收藏”? “收藏”的定义是包含还是排除Iterator,取决于您对“收藏”的定义。不告诉我们,您对“收藏”的定义是什么,无法回答Iterator是否符合您对“收藏”的定义。

标签: scala collections


【解决方案1】:

我们如何 [可以] 将 Iterator 用作 Iterator("a", "number", "of", "words") [即使它不是 Collection]?

这种语法并没有什么特别之处,它只供Collections 使用。我们这里有一个object Iterator 上的apply 方法,它接受可变数量的参数(并返回一个由这些参数序列支持的迭代器实例):

/** Creates an iterator with given elements.
 *
 *  @param elems  The elements returned one-by-one from the iterator
 *  @return An iterator which produces the given elements on the
 *          first calls to `next`, and which has no further elements.
 */
 def apply[A](elems: A*): Iterator[A] = elems.iterator

你可以为自己的课程做同样的事情。

这为“构建器方法”提供了一个很好的语法。

【讨论】:

    【解决方案2】:

    迭代器是一种粗略的集合形式,或者更确切地说是集合的接口。

    查看 Iterator 伴生对象的 apply 方法,我们注意到它只返回 elems.iterator

    /** Creates an iterator with given elements.
     *
     *  @param elems  The elements returned one-by-one from the iterator
     *  @return An iterator which produces the given elements on the
     *          first calls to `next`, and which has no further elements.
     */
     def apply[A](elems: A*): Iterator[A] = elems.iterator
    

    elems 这样的变量参数实际上是mutable.WrappedArray[A] 类型,它实现了IterableLike 特征,因此提供了一个Iterator[A]。

    【讨论】:

      猜你喜欢
      • 2018-07-19
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 1970-01-01
      • 2014-08-13
      • 2013-07-03
      • 2012-08-14
      • 1970-01-01
      相关资源
      最近更新 更多