官术网_书友最值得收藏!

IterableOps

IterableOps extends IterableOnceOps and contains methods that is impossible to implement without a possibility to iterate over the collection multiple times.

They fall into the following categories:

  • Element retrieval: head, headOption, last, and lastOption return the first or last element of the collection throwing NoSuchElementException or returning None for an empty collection.
  • Size: sizeCompare is an optimization that allows us to efficiently compare the size of the collection with given value.
  • Subcollection retrieval: partitionpartitionWithsplitAt, takeRight, dropRight, grouped, sliding, tail, init, groupBygroupMap, groupMapReducetails, and inits. These split the collection as defined by some predicate or index, take or drop elements from the end, group elements by some criteria or predicate possibly applying transformative function, and discard first or last elements.
  • Mapping: scanRight produces a collection containing the cumulative results of applying the giving function starting from the end of the collection.
  • Addition: concat, ++ returns another collection containing all elements of this collection and a collection provided as an argument.
  • Zippers: zip, zipAll, unzip, and unzip3 combine the elements of the collection with the elements of another collection into a product, or split them into separate collections.
  • Transformation: transpose transforms the collection of collections by turning rows into columns and vice versa.

The following methods that defined the abstract in IterableOnceOps got a concrete default implementation in IterableOps: filter, filterNot, take, takeWhile, span, drop, dropWile, slice, scanLeft, map, flatMap, flatten, collect, and zipWithIndexisTraversableAgain is overriden to return true.

It's worth noting that Iterable and IterableOnce do not support a general-equality operation, it is defined on specific collection subtypes. Because of this, it is impossible to compare these types directly using the equality operation, as the following example suggests:

scala> Set(1,2,3) == Seq(1,2,3)
res4: Boolean = false

Also there are three special methods that deserve our additional attention because they introduce types we haven't met yet:

  • def withFilter(p: A => Boolean): collection.WithFilter[A, CC]
  • def iterableFactory: IterableFactory[CC]
  • def view: View[A]

Let's discuss them quickly before moving on to more specific collection types.

主站蜘蛛池模板: 临安市| 舒城县| 武平县| 浦北县| 旺苍县| 米易县| 绍兴县| 历史| 庆云县| 沁水县| 霍林郭勒市| 库伦旗| 海南省| 泰兴市| 孝义市| 东丽区| 邹城市| 西青区| 浮山县| 正阳县| 新巴尔虎左旗| 扶风县| 晋城| 云和县| 贵州省| 嘉荫县| 汝州市| 定结县| 涞源县| 建宁县| 林芝县| 苍溪县| 衡阳县| 常德市| 临高县| 平远县| 邓州市| 临海市| 吉木萨尔县| 开原市| 永嘉县|