Fragmented - Android Developer Podcast

109: Learning Kotlin - Sequences the new Iterables


Listen Later

In this episode of Fragmented, we go back to learning some Kotlin and look at the Iterable like data structure introduced called "Sequences". What is a sequence? How is it different from Iterable? When should I use it?

Show Notes
  • Kotlin Sequence
  • Java Iterable vs Iterator - stackoverflow.com
  • Eager/Lazy

    Eager evaluation:

    val lst = listOf(1, 2)
    val lstMapped: List = lst.map { print("$it "); it * it }
    print("before sum ")
    val sum = lstMapped.sum()
    // prints "1 2 before sum"

    Lazy evaluation:

    val seq = sequenceOf(1, 2)
    val seqMapped: Sequence = seq.map { print("$it "); it * it }
    print("before sum ")
    val sum = seqMapped.sum()
    // prints "before sum 1 2"

    Source stackoverflow.com answer

    Intermediate and terminal operations

    Notice that at each chain operation, a new temporary list is created:

    data class Person(val name: String, val age: Int)
    fun main(args: Array) {
    val people =
    listOf(Person("Chris Martin", 31),
    Person("Will Champion", 32),
    Person("Jonny Buckland", 33),
    Person("Guy Berryman", 34),
    Person("Mhris Cartin", 30))
    println(people
    .filter { it.age > 30 } // new temp. list
    .map {
    it.name.split(" ").map {it[0]}.joinToString("")
    } // new temp. list
    .map { it.toUpperCase() }) // new temp. list
    }

    Using a sequence:

    println(people
    .asSequence() // convert to sequence
    .filter { it.age > 30 } // lazy eval (intermediate op)
    .map {
    it.name.split(" ").map {it[0]}.joinToString("")
    } // lazy eval (intermediate op)
    .map { it.toUpperCase() } // lazy eval (intermediate op)
    .toList() // terminal operation
    )

    Without a terminal operation, Sequences won't print anything:

    val seq = sequenceOf(1, 2, 3)
    println(seq) // prints address
    println(seq.toList()) // [1, 2, 3]

    You can't pick an index from a sequence:

    println(seq[0]) // throws ERROR "No get method providing array access"
    println(seq.toList()[0]) // 1
    Sponsors
    • Mapbox - Android developers don't have to settle for a default same-map-no-matter-what option in their Android app. Mapbox offers complete map design control, allowing you to create beautiful custom maps to meet the needs of your Android users.
    • Check them out today at mapbox.com/android
      Contact
      • @fragmentedcast [twitter.com]
      • @donnfelker and +DonnFelker
      • @kaushikgopal and +KaushikGopalIsMe
      • ...more
        View all episodesView all episodes
        Download on the App Store

        Fragmented - Android Developer PodcastBy Donn Felker, Kaushik Gopal

        • 5
        • 5
        • 5
        • 5
        • 5

        5

        68 ratings


        More shows like Fragmented - Android Developer Podcast

        View all
        Design Details by Brian Lovin, Marshall Bock

        Design Details

        361 Listeners

        Developer Tea by Jonathan Cutrell

        Developer Tea

        402 Listeners

        Does Not Compute by Sean Washington, Rockwell Schrock

        Does Not Compute

        53 Listeners

        Toolsday by Una Kravets, Chris Dhanaraj

        Toolsday

        48 Listeners

        Swift Unwrapped by JP Simard, Jesse Squires, Spec Network, Inc.

        Swift Unwrapped

        90 Listeners