Packages

  • package root

    This is the documentation for the Scala standard library.

    This is the documentation for the Scala standard library.

    Package structure

    The scala package contains core types like Int, Float, Array or Option which are accessible in all Scala compilation units without explicit qualification or imports.

    Notable packages include:

    Other packages exist. See the complete list on the right.

    Additional parts of the standard library are shipped as separate libraries. These include:

    • scala.reflect - Scala's reflection API (scala-reflect.jar)
    • scala.xml - XML parsing, manipulation, and serialization (scala-xml.jar)
    • scala.swing - A convenient wrapper around Java's GUI framework called Swing (scala-swing.jar)
    • scala.util.parsing - Parser combinators (scala-parser-combinators.jar)

    Automatic imports

    Identifiers in the scala package and the scala.Predef object are always in scope by default.

    Some of these identifiers are type aliases provided as shortcuts to commonly used classes. For example, List is an alias for scala.collection.immutable.List.

    Other aliases refer to classes provided by the underlying platform. For example, on the JVM, String is an alias for java.lang.String.

    Definition Classes
    root
  • package scala

    Core Scala types.

    Core Scala types. They are always available without an explicit import.

    Definition Classes
    root
  • package collection

    Contains the base traits and objects needed to use and extend Scala's collection library.

    Contains the base traits and objects needed to use and extend Scala's collection library.

    Guide

    A detailed guide for using the collections library is available at http://docs.scala-lang.org/overviews/collections/introduction.html. Developers looking to extend the collections library can find a description of its architecture at http://docs.scala-lang.org/overviews/core/architecture-of-scala-collections.html.

    Using Collections

    It is convenient to treat all collections as either a scala.collection.Traversable or scala.collection.Iterable, as these traits define the vast majority of operations on a collection.

    Collections can, of course, be treated as specifically as needed, and the library is designed to ensure that the methods that transform collections will return a collection of the same type:

    scala> val array = Array(1,2,3,4,5,6)
    array: Array[Int] = Array(1, 2, 3, 4, 5, 6)
    
    scala> array map { _.toString }
    res0: Array[String] = Array(1, 2, 3, 4, 5, 6)
    
    scala> val list = List(1,2,3,4,5,6)
    list: List[Int] = List(1, 2, 3, 4, 5, 6)
    
    scala> list map { _.toString }
    res1: List[String] = List(1, 2, 3, 4, 5, 6)

    Creating Collections

    The most common way to create a collection is to use its companion object as a factory. The three most commonly used collections are scala.collection.Seq, scala.collection.immutable.Set, and scala.collection.immutable.Map. They can be used directly as shown below since their companion objects are all available as type aliases in either the scala package or in scala.Predef. New collections are created like this:

    scala> val seq = Seq(1,2,3,4,1)
    seq: Seq[Int] = List(1, 2, 3, 4, 1)
    
    scala> val set = Set(1,2,3,4,1)
    set: scala.collection.immutable.Set[Int] = Set(1, 2, 3, 4)
    
    scala> val map = Map(1 -> "one", 2 -> "two", 3 -> "three", 2 -> "too")
    map: scala.collection.immutable.Map[Int,String] = Map(1 -> one, 2 -> too, 3 -> three)

    It is also typical to prefer the scala.collection.immutable collections over those in scala.collection.mutable; the types aliased in the scala.Predef object are the immutable versions.

    Also note that the collections library was carefully designed to include several implementations of each of the three basic collection types. These implementations have specific performance characteristics which are described in the guide.

    The concrete parallel collections also have specific performance characteristics which are described in the parallel collections guide

    Converting to and from Java Collections

    The scala.collection.JavaConverters object provides a collection of decorators that allow converting between Scala and Java collections using asScala and asJava methods.

    Definition Classes
    scala
  • package parallel

    Package object for parallel collections.

    Package object for parallel collections.

    Definition Classes
    collection
  • trait ParIterableLike[+T, +Repr <: ParIterable[T], +Sequential <: scala.Iterable[T] with IterableLike[T, Sequential]] extends GenIterableLike[T, Repr] with CustomParallelizable[T, Repr] with Parallel with HasNewCombiner[T, Repr]

    A template trait for parallel collections of type ParIterable[T].

    A template trait for parallel collections of type ParIterable[T].

    This is a base trait for Scala parallel collections. It defines behaviour common to all parallel collections. Concrete parallel collections should inherit this trait and ParIterable if they want to define specific combiner factories.

    Parallel operations are implemented with divide and conquer style algorithms that parallelize well. The basic idea is to split the collection into smaller parts until they are small enough to be operated on sequentially.

    All of the parallel operations are implemented as tasks within this trait. Tasks rely on the concept of splitters, which extend iterators. Every parallel collection defines:

    def splitter: IterableSplitter[T]

    which returns an instance of IterableSplitter[T], which is a subtype of Splitter[T]. Splitters have a method remaining to check the remaining number of elements, and method split which is defined by splitters. Method split divides the splitters iterate over into disjunct subsets:

    def split: Seq[Splitter]

    which splits the splitter into a sequence of disjunct subsplitters. This is typically a very fast operation which simply creates wrappers around the receiver collection. This can be repeated recursively.

    Tasks are scheduled for execution through a scala.collection.parallel.TaskSupport object, which can be changed through the tasksupport setter of the collection.

    Method newCombiner produces a new combiner. Combiners are an extension of builders. They provide a method combine which combines two combiners and returns a combiner containing elements of both combiners. This method can be implemented by aggressively copying all the elements into the new combiner or by lazily binding their results. It is recommended to avoid copying all of the elements for performance reasons, although that cost might be negligible depending on the use case. Standard parallel collection combiners avoid copying when merging results, relying either on a two-step lazy construction or specific data-structure properties.

    Methods:

    def seq: Sequential
    def par: Repr

    produce the sequential or parallel implementation of the collection, respectively. Method par just returns a reference to this parallel collection. Method seq is efficient - it will not copy the elements. Instead, it will create a sequential version of the collection using the same underlying data structure. Note that this is not the case for sequential collections in general - they may copy the elements and produce a different underlying data structure.

    The combination of methods toMap, toSeq or toSet along with par and seq is a flexible way to change between different collection types.

    Since this trait extends the GenIterable trait, methods like size must also be implemented in concrete collections, while iterator forwards to splitter by default.

    Each parallel collection is bound to a specific fork/join pool, on which dormant worker threads are kept. The fork/join pool contains other information such as the parallelism level, that is, the number of processors used. When a collection is created, it is assigned the default fork/join pool found in the scala.parallel package object.

    Parallel collections are not necessarily ordered in terms of the foreach operation (see Traversable). Parallel sequences have a well defined order for iterators - creating an iterator and traversing the elements linearly will always yield the same order. However, bulk operations such as foreach, map or filter always occur in undefined orders for all parallel collections.

    Existing parallel collection implementations provide strict parallel iterators. Strict parallel iterators are aware of the number of elements they have yet to traverse. It's also possible to provide non-strict parallel iterators, which do not know the number of elements remaining. To do this, the new collection implementation must override isStrictSplitterCollection to false. This will make some operations unavailable.

    To create a new parallel collection, extend the ParIterable trait, and implement size, splitter, newCombiner and seq. Having an implicit combiner factory requires extending this trait in addition, as well as providing a companion object, as with regular collections.

    Method size is implemented as a constant time operation for parallel collections, and parallel collection operations rely on this assumption.

    The higher-order functions passed to certain operations may contain side-effects. Since implementations of bulk operations may not be sequential, this means that side-effects may not be predictable and may produce data-races, deadlocks or invalidation of state if care is not taken. It is up to the programmer to either avoid using side-effects or to use some form of synchronization when accessing mutable data.

    T

    the element type of the collection

    Repr

    the type of the actual collection containing the elements

    Definition Classes
    parallel
  • Accessor
  • Aggregate
  • BuilderOps
  • Collect
  • Composite
  • Copy
  • CopyToArray
  • Count
  • CreateScanTree
  • Drop
  • Exists
  • Filter
  • FilterNot
  • Find
  • FlatMap
  • Fold
  • Forall
  • Foreach
  • FromScanTree
  • GroupBy
  • Map
  • Max
  • Min
  • NonDivisible
  • NonDivisibleTask
  • ParComposite
  • Partition
  • Product
  • Reduce
  • ResultMapping
  • ScanLeaf
  • ScanNode
  • ScanTree
  • SeqComposite
  • SignallingOps
  • Slice
  • Span
  • SplitAt
  • StrictSplitterCheckTask
  • Sum
  • Take
  • TakeWhile
  • TaskOps
  • ToParCollection
  • ToParMap
  • Transformer
  • Zip
  • ZipAll

class Partition[U >: T, This >: Repr] extends Transformer[(Combiner[U, This], Combiner[U, This]), Partition[U, This]]

Attributes
protected[this]
Source
ParIterableLike.scala
Linear Supertypes
Transformer[(Combiner[U, This], Combiner[U, This]), Partition[U, This]], Accessor[(Combiner[U, This], Combiner[U, This]), Partition[U, This]], StrictSplitterCheckTask[(Combiner[U, This], Combiner[U, This]), Partition[U, This]], Task[(Combiner[U, This], Combiner[U, This]), Partition[U, This]], AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. Partition
  2. Transformer
  3. Accessor
  4. StrictSplitterCheckTask
  5. Task
  6. AnyRef
  7. Any
Implicitly
  1. by CollectionsHaveToParArray
  2. by any2stringadd
  3. by StringFormat
  4. by Ensuring
  5. by ArrowAssoc
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Instance Constructors

  1. new Partition(pred: (T) ⇒ Boolean, cbfTrue: CombinerFactory[U, This], cbfFalse: CombinerFactory[U, This], pit: IterableSplitter[T])

Type Members

  1. type Result = (Combiner[U, This], Combiner[U, This])
    Definition Classes
    Task

Value Members

  1. def forwardThrowable(): Unit
    Definition Classes
    Task
  2. def leaf(prev: Option[(Combiner[U, This], Combiner[U, This])]): Unit

    Body of the task - non-divisible unit of work done by this task.

    Body of the task - non-divisible unit of work done by this task. Optionally is provided with the result from the previous completed task or None if there was no previous task (or the previous task is uncompleted or unknown).

    Definition Classes
    PartitionTask
  3. def merge(that: Partition[U, This]): Unit

    Read of results of that task and merge them into results of this one.

    Read of results of that task and merge them into results of this one.

    Definition Classes
    PartitionTask
  4. def repr: Partition[U, This]
    Definition Classes
    Task
  5. def requiresStrictSplitters: Boolean
    Definition Classes
    StrictSplitterCheckTask
  6. var result: (Combiner[U, This], Combiner[U, This])
    Definition Classes
    PartitionTask
  7. def shouldSplitFurther: Boolean

    Decides whether or not this task should be split further.

    Decides whether or not this task should be split further.

    Definition Classes
    AccessorTask
  8. def split: scala.Seq[Task[(Combiner[U, This], Combiner[U, This]), Partition[U, This]]]

    Splits this task into a list of smaller tasks.

    Splits this task into a list of smaller tasks.

    Definition Classes
    AccessorTask
  9. val throwable: Throwable
    Definition Classes
    Task
    Annotations
    @volatile()
  10. def toParArray: ParArray[T]
    Implicit
    This member is added by an implicit conversion from Partition[U, This] to CollectionsHaveToParArray[Partition[U, This], T] performed by method CollectionsHaveToParArray in scala.collection.parallel. This conversion will take place only if an implicit value of type (Partition[U, This]) ⇒ GenTraversableOnce[T] is in scope.
    Definition Classes
    CollectionsHaveToParArray
  11. def toString(): String

    Creates a String representation of this object.

    Creates a String representation of this object. The default representation is platform dependent. On the java platform it is the concatenation of the class name, "@", and the object's hashcode in hexadecimal.

    returns

    a String representation of the object.

    Definition Classes
    Accessor → AnyRef → Any