More Related Content
Introduction to NumPy (PyData SV 2013)
Real World Haskell: Lecture 5
Functional programming with_scala
What's hot
Abstracting over the Monad yielded by a for comprehension and its generators
Scientific Computing with Python - NumPy | WeiYuan
Mutable data types in python
Quicksort - a whistle-stop tour of the algorithm in five languages and four p...
Faster persistent data structures through hashing
Python - Numpy/Pandas/Matplot Machine Learning Libraries
1.Array and linklst definition
Addendum to ‘Monads do not Compose’
Introduction to numpy Session 1
Statistics - ArgMax Equation
Viewers also liked
Carolina castro segundo parcial_tarea2
Principios diseño de interacción
Exposiçao: Kandinsky - Tudo começa num ponto
Interplay Project. National Indigenous Research and Knowledges Network (NIRAK...
7th Etherum Meetup Vienna: Crypto Token Economy - Price of ETH, Bitcoin 1.0 a...
ZAYANN : Parcours pédagogique entre nature et culture
Scala Parallel Collections
Similar to Scala collections wizardry - Scalapeño
Getting Started With Scala
Scala collections api expressivity and brevity upgrade from java
Introduction to parallel and distributed computation with spark
Collections Framework Begineers guide 2
Collections Framework Beginners Guide 2
Intro to Functional Programming in Scala
Scala or functional programming from a python developer's perspective
Demystifying functional programming with Scala
Functional programming with Scala
Introduction à Scala - Michel Schinz - January 2010
Scala. Introduction to FP. Monads
Recently uploaded
The Human Hack: How Cyber Criminals Manipulate Human Psychology
Risk to Patient Delta, Excipients in Digital Twins and Pharma 5.0 - NIPTE 2030
How to Verify a Registered Geomatics Professional on the SAGC Website: A Step...
What makes an AI agent enterprise-ready?
Spacecraft Guidance Quick Research Guide by Arthur Morgan
Comprehensive Guide to JavaScript Functions: Declarations, Expressions, and C...
Dev Dives: Build production-ready process apps with pro-code & AI
NANOTECHNOLOGY, ITS MAIN APPLICATIONS AND IMPACTS ON SOCIETY.pdf
Comprehensive Overview of Web Fundamentals and Modern Web Architectures
Chapter 7 Administering Security in computer security.pdf
NYC ACE 28-Jan-2026- RovoCon Workshop-Combined Presentation.pdf
"How Agentic AI Works – AI Input Sources, Processing, Action Layer & Output |...
The Ai-ESG for Pharmaceutical Generics Companies in EU
Comprehensive Guide to Landed Cost Configuration and Trade Operations
Introduction to LLM Post-Training Techniques
Databricks Demystified_ Unleashing the Power of Unified Data & AI for the Mod...
AI_Powered_RM-ODP_System_Design for beginners
"Ethical AI Practices, Future Trends & How Businesses Can Leverage AI for Gro...
Comprehensive Guide to JavaScript Objects: Creation, Manipulation, and Usage
SRE Made Easy: Comprehensive Guide to Site Reliability Engineering and Servic...
Scala collections wizardry - Scalapeño
- 1.
- 2.
Warm up example: Fibonaccisequence val fibs: Stream[Int] = 0 #:: fibs.scanLeft(1)(_ + _) Key concepts: • Recursive values • Streams • Scan • Binary place-holder notation
- 3.
Immutable collections You’ll knowabout • Avoid memory allocation for empty collections • Optimize for small collections • Equal-hashCode contract • Asymptotic behavior of common operations
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
Computing a derivative defderivative(nums: Iterable[Double]) = nums.sliding(2) .map (pair => pair._2 - pair._1) What can be improved in this solution? Bonus question: change a few characters to find the max slope
- 14.
- 15.
Word n-grams val range= 1 to 3 val text = "hello sweet world" val tokenize = (s: String) => s.split(" ") range flatMap (size => tokenize(text) sliding size) Result: Vector(Array(hello), Array(sweet), Array(world), Array(hello, sweet), Array(sweet, world), Array(hello, sweet, world))
- 16.
Are all membersof a greater than corresponding members of b val a = List(2,3,4) val b = List(1,2,3) // O(n^2) and not very elegant. (0 until a.size) forall (i => a(i) > b(i)) // O(n) but creates tuples and a temporary list. Yet, more elegant. a zip b forall (x=> x._1 > x._2) // same as above but doesn't create a temporary list (lazy) a.view zip b forall (x=> x._1 > x._2) // O(n), without tuple or temporary list creation, and even more elegant. (a corresponds b)(_ > _)
- 17.
Strings are collections.How come? “abc”.max @inline implicit def augmentString(x: String) = new StringOps(x) String <% StringOps <: StringLike <: IndexedSeqOptimized …
- 18.
Complexity of collectionoperations • Linear: – Unary: O(n): • Mappers: map, collect • Reducers: reduce, foldLeft, foldRight • Others: foreach, filter, indexOf, reverse, find, mkString – Binary: O(n+ m): • union, diff, and intersect
- 19.
Immutable Collections timecomplexity head tail apply update prepend append List C C L L C L Stream C C L L C L Vector eC eC eC eC eC eC Stack C C L L C L Queue aC aC L L L C Range C C C - - - String C L C L L L
- 20.
Mutable Collections timecomplexity head tail apply update prepend append insert ArrayBuffer C L C C L aC L ListBuffer C L L L C C L StringBuilde r C L C C L aC L MutableList C L L L C C L Queue C L L L C C L ArraySeq C L C C - - - Stack C L L L C L L ArrayStack C L C C aC L L Array C L C C - - -
- 21.
- 22.
- 23.
Equals-hashCode contract (a equalsb) (a.hashCode == b.hashCode) All Scala collection implement the contract Bad idea: Set[Array[Int]] Good idea: Set[Vector[Int]] Bad Idea: Set[ArrayBuffer[Int]] Bad Idea: Set[collection.mutable._] Good Idea: Set[collection.immutable._]
- 24.
More on collectionsequality val (a, b) = (1 to 3, List(1, 2, 3)) a == b // true Q: Wait, how efficient is Range.hashCode? A: O(n) override def hashCode = util.hashing.MurmurHash3.seqHash(seq) Challenge yourself: Is there a closed (o(1)) formula for a range hashCode?
- 25.
Java interoperability Implicit (lessboilerplate): import collection.javaConversions._ javaCollection.filter(…) Explicit (better control): Import collection.javaConverters._ javaCollection.asScala.filter(…) scalaCollection.asJava
- 26.
The power oftype-level programming graph path-finding in compile time import scala.language.implicitConversions // Vertices case class A(l: List[Char]) case class B(l: List[Char]) case class C(l: List[Char]) case class D(l: List[Char]) case class E(l: List[Char]) // Edges implicit def ad[A1 <% A](x: A1) = D(x.l :+ 'A') implicit def bc[B1 <% B](x: B1) = C(x.l :+ 'B') implicit def ce[C1 <% C](x: C1) = E(x.l :+ 'C') implicit def ea[E1 <% E](x: E1) = A(x.l :+ 'E') def pathFrom(end:D) = end pathFrom(B(Nil)) // res0: D = D(List(B, C, E, A))
- 27.
Want to goPro? • Shapeless (Miles Sabin) – Polytypic programming & Heterogenous lists – github.com/milessabin/shapeless • Scalaxy (Olivier Chafik) – Macros for boosting performance of collections – github.com/ochafik/Scalaxy