- Learn Scala Programming
- Slava Schmidt
- 347字
- 2021-06-10 19:35:40
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: partition, partitionWith, splitAt, takeRight, dropRight, grouped, sliding, tail, init, groupBy, groupMap, groupMapReduce, tails, 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 zipWithIndex. isTraversableAgain 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.
- The Complete Rust Programming Reference Guide
- Java多線程編程實戰指南:設計模式篇(第2版)
- ThinkPHP 5實戰
- Python數據分析基礎
- Vue.js 3.0源碼解析(微課視頻版)
- SAS數據統計分析與編程實踐
- Oracle 18c 必須掌握的新特性:管理與實戰
- Visual C++開發入行真功夫
- SQL基礎教程(第2版)
- 大話Java:程序設計從入門到精通
- 從零開始:UI圖標設計與制作(第3版)
- C++ Application Development with Code:Blocks
- jQuery for Designers Beginner's Guide Second Edition
- Visual Basic程序設計全程指南
- Docker:容器與容器云(第2版)