SlideShare a Scribd company logo
1 of 25
Download to read offline
Scala Collections




iBAT Session > June 17' 2011 > Meetu Maltiar
An Example
package com.inphina.collections.person

class Person(val name: String, val age: Int) {

 }

Somewhere in the code:
val (minors, adults) = people partition (_.age < 18)

Three concepts:
   - Simple pattern matching
   - An Infix method call
   - A function value
The Scala Way Of Collections
scala> val ys = List(1, 2, 3)
ys: List[Int] = List(1, 2, 3)

scala> val xs: Seq[Int] = ys
xs: Seq[Int] = List(1, 2, 3)

scala> xs map (_ + 1)
res0: Seq[Int] = List(2, 3, 4)

scala> ys map (_ + 1)
res1: List[Int] = List(2, 3, 4)
Collection Properties
Object-oriented

Generic: List[T], Map[K, V]

optionally persistent: scala.collections.immutable

Higher-order with methods like foreach, map, filter

uniform return type principle: operations return
collections of same type as their left operand
The Uniform Return Type Principle
Bulk operations return collections of the same type (constructor) as
their left operand.

scala> val ys = List(1,2,3)
ys: List[Int] = List(1, 2, 3)

scala> val xs: Seq[Int] = ys
xs: Seq[Int] = List(1, 2, 3)

scala> xs map(_ + 1)
res0: Seq[Int] = List(2, 3, 4)

scala> ys map(_ + 1)
res1: List[Int] = List(2, 3, 4)
Using Collections: Map and Filter
scala> val xs = List(1, 2, 3)
xs: List[Int] = List(1, 2, 3)

scala> val ys = xs map (x => x + 1)
ys: List[Int] = List(2, 3, 4)

scala> val ys = xs map (_ + 1)
ys: List[Int] = List(2, 3, 4)

scala> val zs = ys filter (_ % 2 == 0)
zs: List[Int] = List(2 , 4)

scala> val as = ys map (0 to _)
as: List[scala.collection.immutable.Range.Inclusive] =
List(Range(0, 1), Range(0, 1, 2), Range(0, 1, 2, 3))
Using Collections: flatMap and groupBy
scala> val bs = as.flatten
bs: List[Int] = List(0, 1, 0, 1, 2, 0, 1, 2, 3)

scala> val bs = ys flatMap (0 to _)
bs: List[Int] = List(0, 1, 0, 1, 2, 0, 1, 2, 3)

scala> val fruit = Vector("apples", "oranges", "ananas")
fruit: scala.collection.immutable.Vector[java.lang.String] =
Vector(apples, oranges, ananas)

scala> fruit groupBy (_.head)
res3:
scala.collection.immutable.Map[Char,scala.collection.immutable.Ve
ctor[java.lang.String]] = Map(a -> Vector(apples, ananas), o ->
Vector(oranges))
Using Collections: For Notation

scala> for (x <- xs) yield x + 1                   // map
res7: Seq[Int] = List(2, 3, 4)

scala> for (x <- res7 if x % 2 == 0 ) yield x      // filter
res8: Seq[Int] = List(2, 4)

scala> for (x <- xs; y <- 0 to x) yield y          // flatMap
res9: Seq[Int] = List(0, 1, 0, 1, 2, 0, 1, 2, 3)
String also a Collection

Even String is also a collection that means we can
apply higher order functions on it.

scala> val aString = "hello world"
aString: java.lang.String = hello world

scala> aString map (_.toUpper)
res12: String = HELLO WORLD
Using Maps
scala> val m = Map(1 -> "ABC", 2 -> "DEF", 3 -> "GHI")
m: scala.collection.immutable.Map[Int,java.lang.String] = Map(1 -> ABC,
2 -> DEF, 3 -> GHI)

scala> m(2)
res10: java.lang.String = DEF

scala> m + (4 -> "JKL")
res11: scala.collection.immutable.Map[Int,java.lang.String] = Map(1 ->
ABC, 2 -> DEF, 3 -> GHI, 4 -> JKL)

scala> m map {case (k, v) => (v, k)}
res12: scala.collection.immutable.Map[java.lang.String,Int] = Map(ABC
-> 1, DEF -> 2, GHI -> 3)
Scala Collection Hierarchy

All Collection classes are in scala.collection or one of its sub-
packages mutable, immutable and generic

Root collections in the package scala.collection define the
same interface as immutable collections and mutable
collections add some modification operations to make it
mutable

The generic package contains building block for implementing
Collections.
Scala.Collection Hierarchy
Scala.Collection.Immutable
Scala.Collection.Mutable
Overview Of Collections
Traversable
   Iterable
        Seq
             IndexedSeq
             LinearSeq
             mutable.Buffer
             Range
        Set
            SortedSet
            immutable.HashSet
            mutable.HashSet
            mutable.LinkedHashSet
            BitSet
        Map
            SortedMap
            immutable.HashMap
            mutable.HashMap
            mutable.LinkedHashMap
Commonality In collections
All classes are quite common. For instance, every
kind of collection can be created by same uniform
Syntax
   Traversable(1, 2, 3)
   Iterable("x", "y", "z")
   Map("x" -> 24, "y" -> 25, "z" -> 26)
   Set(Color.red, Color.green, Color.blue)
   SortedSet("hello", "world")
   Buffer(x, y, z)
   IndexedSeq(1.0, 2.0)
   LinearSeq(a, b, c)

The same principle applies with specific collection implementations
   List(1, 2, 3)
   HashMap("x" -> 24, "y" -> 25, "z" -> 26)
Commonality In collections...
All these Collections get displayed with toString in the same way
they are written above

All collections support the API provided by Traversable but
specializes types wherever it makes sense

map method in class Traversable returns another Traversable as
its result. But this result type is overridden in subclasses

     scala> List(1, 2, 3) map (_ + 1)
     res0: List[Int] = List(2, 3, 4)
     scala> Set(1, 2, 3) map (_ * 2)
     res0: Set[Int] = Set(2, 4, 6)

This behavior in the collections libraries is called the uniform return type principle.
Trait Traversable
Top of collection hierarchy. Its abstract method is foreach:
def foreach[U](f: Elem => U)

Traversable also provides lot of concrete methods they fall in
following categories
  Addition: ++, appends two traversables together
  Map operations: map, flatMap, and collect
  Conversions: toArray, toList, toIterable, toSeq, toIndexedSeq, toStream, toSet, toMap,
  Copying operations: copyToBuffer and copyToArray
  Size info operations: isEmpty, nonEmpty, size, and hasDefiniteSize
  Element retrieval operations: head, last, headOption, lastOption, and find
  Sub-Collection retrieval operations: tail, init, slice, take, drop, takeWhile,
                                             dropWhile, filter, filterNot, withFilter
  Subdivision operations: splitAt, span, partition, groupBy
  Element tests: exists, forall, count
  Folds: foldLeft, foldRight, /:, :, reduceLeft, reduceRight
  Specific Folds: sum, product, min, max
  String Operations: mkString, addString, stringPrefix
Trait Iterable

This is the next Trait in Collection hierarchy. All methods in this trait
are defined in terms of an abstract method iterator, which returns
collection results one by one.

The foreach method from trait Traversable is implemented in
Iterable in terms of iterator

def foreach[U](f: Elem => U): Unit = {
  val it = iterator
  while (it.hasNext) f(it.next())
}
An Example ..
Task: Phone keys has mnemonics attached to them

val mnemonics = Map(
        '2' -> "ABC", '3' -> "DEF", '4' -> "GHI", '5' -> "JKL", '6' -> "MNO",
        '7' -> "PQRS", '8' -> "TUV", '9' -> "WXYZ")

Assume that you are given a dictionary dict as a list of words. Design a
class Coder with a method translate such that
    new Coder(dict).translate(phoneNumber)

Produces all phrases of words which can serve as mnemonics for the
phone number

Example The phone number “7225276257” should have a mnemonic
  Scala rocks
as one element of the list of solution phrases
An Example
Creating a mnemonics Map
val mnemonics = Map('2' -> "ABC", '3' -> "DEF", '4' -> "GHI", '5' -> "JKL",
'6' -> "MNO", '7' -> "PQRS", '8' -> "TUV", '9' -> "WXYZ")

Creating reverse map with upper code
val upperCode: Map[Char, Char] = for ((digit, str) <- mnemonics; ltr <- str)
yield (ltr -> digit)

Creating a word for which digit string will be generated
val word = "java"

Gettng a digit string from a word eg; "java" -> "5282"
word.toUpperCase map (upperCode(_))
Everything is a library

Collections feel they are language constructs
Language does not contain any collection related
constructs
   - no collection types
   - no collection literals
   - no collection operators
Everything is in library
They are extensible
Conclusion

De-emphasize destructive updates

Focus on Transformers that map collections to collections

Have complete range of persistent collections
Next Steps

Making and extending Scala Collection

Parallel Collections:
Move from Mutable → Persistent → Parallel
References



Martin Odersky's talk at Parleys

Scala Collection documentation

More Related Content

What's hot

Scala Back to Basics: Type Classes
Scala Back to Basics: Type ClassesScala Back to Basics: Type Classes
Scala Back to Basics: Type ClassesTomer Gabel
 
Scala collections api expressivity and brevity upgrade from java
Scala collections api  expressivity and brevity upgrade from javaScala collections api  expressivity and brevity upgrade from java
Scala collections api expressivity and brevity upgrade from javaIndicThreads
 
Collections In Scala
Collections In ScalaCollections In Scala
Collections In ScalaKnoldus Inc.
 
Data Structures In Scala
Data Structures In ScalaData Structures In Scala
Data Structures In ScalaKnoldus Inc.
 
Purely Functional Data Structures in Scala
Purely Functional Data Structures in ScalaPurely Functional Data Structures in Scala
Purely Functional Data Structures in ScalaVladimir Kostyukov
 
Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Jonas Bonér
 
scalaliftoff2009.pdf
scalaliftoff2009.pdfscalaliftoff2009.pdf
scalaliftoff2009.pdfHiroshi Ono
 
The Scala Programming Language
The Scala Programming LanguageThe Scala Programming Language
The Scala Programming Languageleague
 
Introduction à Scala - Michel Schinz - January 2010
Introduction à Scala - Michel Schinz - January 2010Introduction à Scala - Michel Schinz - January 2010
Introduction à Scala - Michel Schinz - January 2010JUG Lausanne
 
Introduction to parallel and distributed computation with spark
Introduction to parallel and distributed computation with sparkIntroduction to parallel and distributed computation with spark
Introduction to parallel and distributed computation with sparkAngelo Leto
 
Functions In Scala
Functions In Scala Functions In Scala
Functions In Scala Knoldus Inc.
 
Scala - en bedre og mere effektiv Java?
Scala - en bedre og mere effektiv Java?Scala - en bedre og mere effektiv Java?
Scala - en bedre og mere effektiv Java?Jesper Kamstrup Linnet
 

What's hot (18)

Scala Back to Basics: Type Classes
Scala Back to Basics: Type ClassesScala Back to Basics: Type Classes
Scala Back to Basics: Type Classes
 
Scala for curious
Scala for curiousScala for curious
Scala for curious
 
Scala collections api expressivity and brevity upgrade from java
Scala collections api  expressivity and brevity upgrade from javaScala collections api  expressivity and brevity upgrade from java
Scala collections api expressivity and brevity upgrade from java
 
Collections In Scala
Collections In ScalaCollections In Scala
Collections In Scala
 
An introduction to scala
An introduction to scalaAn introduction to scala
An introduction to scala
 
Data Structures In Scala
Data Structures In ScalaData Structures In Scala
Data Structures In Scala
 
Purely Functional Data Structures in Scala
Purely Functional Data Structures in ScalaPurely Functional Data Structures in Scala
Purely Functional Data Structures in Scala
 
Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)
 
scalaliftoff2009.pdf
scalaliftoff2009.pdfscalaliftoff2009.pdf
scalaliftoff2009.pdf
 
The Scala Programming Language
The Scala Programming LanguageThe Scala Programming Language
The Scala Programming Language
 
Introduction à Scala - Michel Schinz - January 2010
Introduction à Scala - Michel Schinz - January 2010Introduction à Scala - Michel Schinz - January 2010
Introduction à Scala - Michel Schinz - January 2010
 
Practical cats
Practical catsPractical cats
Practical cats
 
Introduction to parallel and distributed computation with spark
Introduction to parallel and distributed computation with sparkIntroduction to parallel and distributed computation with spark
Introduction to parallel and distributed computation with spark
 
Functions In Scala
Functions In Scala Functions In Scala
Functions In Scala
 
Suit case class
Suit case classSuit case class
Suit case class
 
JAVA PROGRAMMING - The Collections Framework
JAVA PROGRAMMING - The Collections Framework JAVA PROGRAMMING - The Collections Framework
JAVA PROGRAMMING - The Collections Framework
 
Scala - en bedre og mere effektiv Java?
Scala - en bedre og mere effektiv Java?Scala - en bedre og mere effektiv Java?
Scala - en bedre og mere effektiv Java?
 
1.2 scala basics
1.2 scala basics1.2 scala basics
1.2 scala basics
 

Similar to Scala Collections

Short Reference Card for R users.
Short Reference Card for R users.Short Reference Card for R users.
Short Reference Card for R users.Dr. Volkan OBAN
 
Functional programming with_scala
Functional programming with_scalaFunctional programming with_scala
Functional programming with_scalaRaymond Tay
 
Seminar PSU 09.04.2013 - 10.04.2013 MiFIT, Arbuzov Vyacheslav
Seminar PSU 09.04.2013 - 10.04.2013 MiFIT, Arbuzov VyacheslavSeminar PSU 09.04.2013 - 10.04.2013 MiFIT, Arbuzov Vyacheslav
Seminar PSU 09.04.2013 - 10.04.2013 MiFIT, Arbuzov VyacheslavVyacheslav Arbuzov
 
R command cheatsheet.pdf
R command cheatsheet.pdfR command cheatsheet.pdf
R command cheatsheet.pdfNgcnh947953
 
Underscore.js
Underscore.jsUnderscore.js
Underscore.jstimourian
 
Multiclass Logistic Regression: Derivation and Apache Spark Examples
Multiclass Logistic Regression: Derivation and Apache Spark ExamplesMulticlass Logistic Regression: Derivation and Apache Spark Examples
Multiclass Logistic Regression: Derivation and Apache Spark ExamplesMarjan Sterjev
 
Scala parallel-collections
Scala parallel-collectionsScala parallel-collections
Scala parallel-collectionsKnoldus Inc.
 
Scala parallel-collections
Scala parallel-collectionsScala parallel-collections
Scala parallel-collectionsKnoldus Inc.
 
R Programming Reference Card
R Programming Reference CardR Programming Reference Card
R Programming Reference CardMaurice Dawson
 

Similar to Scala Collections (20)

Reference card for R
Reference card for RReference card for R
Reference card for R
 
Short Reference Card for R users.
Short Reference Card for R users.Short Reference Card for R users.
Short Reference Card for R users.
 
Functional programming with_scala
Functional programming with_scalaFunctional programming with_scala
Functional programming with_scala
 
Seminar PSU 09.04.2013 - 10.04.2013 MiFIT, Arbuzov Vyacheslav
Seminar PSU 09.04.2013 - 10.04.2013 MiFIT, Arbuzov VyacheslavSeminar PSU 09.04.2013 - 10.04.2013 MiFIT, Arbuzov Vyacheslav
Seminar PSU 09.04.2013 - 10.04.2013 MiFIT, Arbuzov Vyacheslav
 
R command cheatsheet.pdf
R command cheatsheet.pdfR command cheatsheet.pdf
R command cheatsheet.pdf
 
@ R reference
@ R reference@ R reference
@ R reference
 
Spark workshop
Spark workshopSpark workshop
Spark workshop
 
Underscore.js
Underscore.jsUnderscore.js
Underscore.js
 
R gráfico
R gráficoR gráfico
R gráfico
 
tidyr.pdf
tidyr.pdftidyr.pdf
tidyr.pdf
 
Multiclass Logistic Regression: Derivation and Apache Spark Examples
Multiclass Logistic Regression: Derivation and Apache Spark ExamplesMulticlass Logistic Regression: Derivation and Apache Spark Examples
Multiclass Logistic Regression: Derivation and Apache Spark Examples
 
Frp2016 3
Frp2016 3Frp2016 3
Frp2016 3
 
Map, Reduce and Filter in Swift
Map, Reduce and Filter in SwiftMap, Reduce and Filter in Swift
Map, Reduce and Filter in Swift
 
Scala parallel-collections
Scala parallel-collectionsScala parallel-collections
Scala parallel-collections
 
Scala parallel-collections
Scala parallel-collectionsScala parallel-collections
Scala parallel-collections
 
Scala Introduction
Scala IntroductionScala Introduction
Scala Introduction
 
Statistics lab 1
Statistics lab 1Statistics lab 1
Statistics lab 1
 
R교육1
R교육1R교육1
R교육1
 
20170509 rand db_lesugent
20170509 rand db_lesugent20170509 rand db_lesugent
20170509 rand db_lesugent
 
R Programming Reference Card
R Programming Reference CardR Programming Reference Card
R Programming Reference Card
 

More from Meetu Maltiar

Scala categorytheory
Scala categorytheoryScala categorytheory
Scala categorytheoryMeetu Maltiar
 
Easy ORMness with Objectify-Appengine
Easy ORMness with Objectify-AppengineEasy ORMness with Objectify-Appengine
Easy ORMness with Objectify-AppengineMeetu Maltiar
 
Getting Started With Scala
Getting Started With ScalaGetting Started With Scala
Getting Started With ScalaMeetu Maltiar
 

More from Meetu Maltiar (7)

Introducing Akka
Introducing AkkaIntroducing Akka
Introducing Akka
 
Fitnesse With Scala
Fitnesse With ScalaFitnesse With Scala
Fitnesse With Scala
 
Akka 2.0 Reloaded
Akka 2.0 ReloadedAkka 2.0 Reloaded
Akka 2.0 Reloaded
 
Scala categorytheory
Scala categorytheoryScala categorytheory
Scala categorytheory
 
Scala test
Scala testScala test
Scala test
 
Easy ORMness with Objectify-Appengine
Easy ORMness with Objectify-AppengineEasy ORMness with Objectify-Appengine
Easy ORMness with Objectify-Appengine
 
Getting Started With Scala
Getting Started With ScalaGetting Started With Scala
Getting Started With Scala
 

Recently uploaded

Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 

Recently uploaded (20)

Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 

Scala Collections

  • 1. Scala Collections iBAT Session > June 17' 2011 > Meetu Maltiar
  • 2. An Example package com.inphina.collections.person class Person(val name: String, val age: Int) { } Somewhere in the code: val (minors, adults) = people partition (_.age < 18) Three concepts: - Simple pattern matching - An Infix method call - A function value
  • 3. The Scala Way Of Collections scala> val ys = List(1, 2, 3) ys: List[Int] = List(1, 2, 3) scala> val xs: Seq[Int] = ys xs: Seq[Int] = List(1, 2, 3) scala> xs map (_ + 1) res0: Seq[Int] = List(2, 3, 4) scala> ys map (_ + 1) res1: List[Int] = List(2, 3, 4)
  • 4. Collection Properties Object-oriented Generic: List[T], Map[K, V] optionally persistent: scala.collections.immutable Higher-order with methods like foreach, map, filter uniform return type principle: operations return collections of same type as their left operand
  • 5. The Uniform Return Type Principle Bulk operations return collections of the same type (constructor) as their left operand. scala> val ys = List(1,2,3) ys: List[Int] = List(1, 2, 3) scala> val xs: Seq[Int] = ys xs: Seq[Int] = List(1, 2, 3) scala> xs map(_ + 1) res0: Seq[Int] = List(2, 3, 4) scala> ys map(_ + 1) res1: List[Int] = List(2, 3, 4)
  • 6. Using Collections: Map and Filter scala> val xs = List(1, 2, 3) xs: List[Int] = List(1, 2, 3) scala> val ys = xs map (x => x + 1) ys: List[Int] = List(2, 3, 4) scala> val ys = xs map (_ + 1) ys: List[Int] = List(2, 3, 4) scala> val zs = ys filter (_ % 2 == 0) zs: List[Int] = List(2 , 4) scala> val as = ys map (0 to _) as: List[scala.collection.immutable.Range.Inclusive] = List(Range(0, 1), Range(0, 1, 2), Range(0, 1, 2, 3))
  • 7. Using Collections: flatMap and groupBy scala> val bs = as.flatten bs: List[Int] = List(0, 1, 0, 1, 2, 0, 1, 2, 3) scala> val bs = ys flatMap (0 to _) bs: List[Int] = List(0, 1, 0, 1, 2, 0, 1, 2, 3) scala> val fruit = Vector("apples", "oranges", "ananas") fruit: scala.collection.immutable.Vector[java.lang.String] = Vector(apples, oranges, ananas) scala> fruit groupBy (_.head) res3: scala.collection.immutable.Map[Char,scala.collection.immutable.Ve ctor[java.lang.String]] = Map(a -> Vector(apples, ananas), o -> Vector(oranges))
  • 8. Using Collections: For Notation scala> for (x <- xs) yield x + 1 // map res7: Seq[Int] = List(2, 3, 4) scala> for (x <- res7 if x % 2 == 0 ) yield x // filter res8: Seq[Int] = List(2, 4) scala> for (x <- xs; y <- 0 to x) yield y // flatMap res9: Seq[Int] = List(0, 1, 0, 1, 2, 0, 1, 2, 3)
  • 9. String also a Collection Even String is also a collection that means we can apply higher order functions on it. scala> val aString = "hello world" aString: java.lang.String = hello world scala> aString map (_.toUpper) res12: String = HELLO WORLD
  • 10. Using Maps scala> val m = Map(1 -> "ABC", 2 -> "DEF", 3 -> "GHI") m: scala.collection.immutable.Map[Int,java.lang.String] = Map(1 -> ABC, 2 -> DEF, 3 -> GHI) scala> m(2) res10: java.lang.String = DEF scala> m + (4 -> "JKL") res11: scala.collection.immutable.Map[Int,java.lang.String] = Map(1 -> ABC, 2 -> DEF, 3 -> GHI, 4 -> JKL) scala> m map {case (k, v) => (v, k)} res12: scala.collection.immutable.Map[java.lang.String,Int] = Map(ABC -> 1, DEF -> 2, GHI -> 3)
  • 11. Scala Collection Hierarchy All Collection classes are in scala.collection or one of its sub- packages mutable, immutable and generic Root collections in the package scala.collection define the same interface as immutable collections and mutable collections add some modification operations to make it mutable The generic package contains building block for implementing Collections.
  • 15. Overview Of Collections Traversable Iterable Seq IndexedSeq LinearSeq mutable.Buffer Range Set SortedSet immutable.HashSet mutable.HashSet mutable.LinkedHashSet BitSet Map SortedMap immutable.HashMap mutable.HashMap mutable.LinkedHashMap
  • 16. Commonality In collections All classes are quite common. For instance, every kind of collection can be created by same uniform Syntax Traversable(1, 2, 3) Iterable("x", "y", "z") Map("x" -> 24, "y" -> 25, "z" -> 26) Set(Color.red, Color.green, Color.blue) SortedSet("hello", "world") Buffer(x, y, z) IndexedSeq(1.0, 2.0) LinearSeq(a, b, c) The same principle applies with specific collection implementations List(1, 2, 3) HashMap("x" -> 24, "y" -> 25, "z" -> 26)
  • 17. Commonality In collections... All these Collections get displayed with toString in the same way they are written above All collections support the API provided by Traversable but specializes types wherever it makes sense map method in class Traversable returns another Traversable as its result. But this result type is overridden in subclasses scala> List(1, 2, 3) map (_ + 1) res0: List[Int] = List(2, 3, 4) scala> Set(1, 2, 3) map (_ * 2) res0: Set[Int] = Set(2, 4, 6) This behavior in the collections libraries is called the uniform return type principle.
  • 18. Trait Traversable Top of collection hierarchy. Its abstract method is foreach: def foreach[U](f: Elem => U) Traversable also provides lot of concrete methods they fall in following categories Addition: ++, appends two traversables together Map operations: map, flatMap, and collect Conversions: toArray, toList, toIterable, toSeq, toIndexedSeq, toStream, toSet, toMap, Copying operations: copyToBuffer and copyToArray Size info operations: isEmpty, nonEmpty, size, and hasDefiniteSize Element retrieval operations: head, last, headOption, lastOption, and find Sub-Collection retrieval operations: tail, init, slice, take, drop, takeWhile, dropWhile, filter, filterNot, withFilter Subdivision operations: splitAt, span, partition, groupBy Element tests: exists, forall, count Folds: foldLeft, foldRight, /:, :, reduceLeft, reduceRight Specific Folds: sum, product, min, max String Operations: mkString, addString, stringPrefix
  • 19. Trait Iterable This is the next Trait in Collection hierarchy. All methods in this trait are defined in terms of an abstract method iterator, which returns collection results one by one. The foreach method from trait Traversable is implemented in Iterable in terms of iterator def foreach[U](f: Elem => U): Unit = { val it = iterator while (it.hasNext) f(it.next()) }
  • 20. An Example .. Task: Phone keys has mnemonics attached to them val mnemonics = Map( '2' -> "ABC", '3' -> "DEF", '4' -> "GHI", '5' -> "JKL", '6' -> "MNO", '7' -> "PQRS", '8' -> "TUV", '9' -> "WXYZ") Assume that you are given a dictionary dict as a list of words. Design a class Coder with a method translate such that new Coder(dict).translate(phoneNumber) Produces all phrases of words which can serve as mnemonics for the phone number Example The phone number “7225276257” should have a mnemonic Scala rocks as one element of the list of solution phrases
  • 21. An Example Creating a mnemonics Map val mnemonics = Map('2' -> "ABC", '3' -> "DEF", '4' -> "GHI", '5' -> "JKL", '6' -> "MNO", '7' -> "PQRS", '8' -> "TUV", '9' -> "WXYZ") Creating reverse map with upper code val upperCode: Map[Char, Char] = for ((digit, str) <- mnemonics; ltr <- str) yield (ltr -> digit) Creating a word for which digit string will be generated val word = "java" Gettng a digit string from a word eg; "java" -> "5282" word.toUpperCase map (upperCode(_))
  • 22. Everything is a library Collections feel they are language constructs Language does not contain any collection related constructs - no collection types - no collection literals - no collection operators Everything is in library They are extensible
  • 23. Conclusion De-emphasize destructive updates Focus on Transformers that map collections to collections Have complete range of persistent collections
  • 24. Next Steps Making and extending Scala Collection Parallel Collections: Move from Mutable → Persistent → Parallel
  • 25. References Martin Odersky's talk at Parleys Scala Collection documentation