/collection-strawman

Experimenting with Scala Collections designs for Scala 2.13

Primary LanguageScala

Collection-Strawman

Join the chat at https://gitter.im/scala/collection-strawman

Prototype improvements for Scala collections.

Use it in your project

Add the following dependency to your project:

libraryDependencies += "ch.epfl.scala" %% "collection-strawman" % "0.2.0"

The 0.2.0 version is compatible with Scala 2.13 and Dotty. Scala 2.12 is also supported but you might encounter type inference issues with it.

We also automatically publish snapshots on Sonatype:

resolvers += Resolver.sonatypeRepo("snapshots")

libraryDependencies += "ch.epfl.scala" %% "collection-strawman" % "0.3.0-SNAPSHOT"

Contributing

See the CONTRIBUTING file.

Implemented collection types

  • List
  • LazyList (aka Stream in 2.12)
  • Queue
  • Stack
  • ArrayOps
  • StringOps
  • ArrayBuffer
  • ImmutableArray (new)
  • ListBuffer
  • UnrolledBuffer
  • LinkedList
  • DoubleLinkedList
  • Range / NumericRange
  • Vector
  • HashMap
  • TreeMap
  • IntMap / LongMap (?)
  • ListMap
  • MultiMap
  • HashSet
  • ListSet
  • TreeSet
  • EqSet
  • BitSet
  • View

Implemented operations (on the relevant collection types)

Operations not returning a collection

  • apply
  • contains
  • containsSlice
  • count
  • endsWith
  • find
  • firstKey
  • forall / exists
  • foreach
  • foldLeft
  • foldRight
  • get
  • getOrElse
  • getOrElseUpdate
  • head
  • indexOf / indexWhere / lastIndexOf / lastIndexWhere / indexOfSlice / lastIndexOfSlice
  • indices
  • isDefinedAt
  • isEmpty / nonEmpty
  • keysIteratorFrom
  • last / lastOption
  • lastKey
  • max / maxBy
  • min / minBy
  • mkString
  • product
  • reduce / reduceOption / reduceLeft / reduceRight
  • size
  • span
  • startsWith
  • sum
  • to

Transformations to collections having the same element type

  • diff
  • drop / dropRight / dropWhile
  • empty
  • filter / filterNot
  • groupBy
  • init
  • intersect
  • partition
  • range
  • rangeImpl
  • sorted / sortBy / sortWith
  • slice
  • splitAt
  • substetOf
  • subsets
  • tail
  • take / takeRight / takeWhile
  • updated

Transformations to collections that can have a different element type

  • combinations
  • updated
  • prepend
  • append
  • ++ / concat / union
  • flatMap
  • grouped
  • map
  • merged
  • padTo
  • permutations
  • scan / scanLeft / scanRight
  • sliding
  • unzip
  • zip / zipWithIndex

In-place mutating operations

TODO