Read the first value from a typed generic list.

generic-list-helper `List[A]` is a standard generic collection. A `List[String]` can only produce strings, so the fallback value uses the same element type.

Generic First Element

useEmpty
ListFirstGeneric.scala
Replay: real traced execution (multi-file project)
object Main {
  def main(args: Array[String]): Unit = {
    val useEmpty = false
    val names: List[String] = if (useEmpty) List.empty[String] else List("Ada", "Lin")
    val picked = names.headOption.getOrElse("none")
    val count = names.length

    println("count=" + count)
    println("picked=" + picked)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val useEmpty = true
    val names: List[String] = if (useEmpty) List.empty[String] else List("Ada", "Lin")
    val picked = names.headOption.getOrElse("none")
    val count = names.length

    println("count=" + count)
    println("picked=" + picked)
  }
}
  1. useEmpty ← false, names ← List(Ada, Lin), picked ← Ada, count ← 2

    1object Main {2  def main(args: Array[String]): Unit = {3    val useEmpty→ false = false //@useEmpty=true4    val names→ List(Ada, Lin): List[String] = if (useEmptyfalse) List.empty[String] else List("Ada", "Lin")5    val picked→ Ada = names.headOptionSome(Ada).getOrElse("none")6    val count→ 2 = names.length→ 278    println("count=" + count2)9    println("picked=" + pickedAda)10  }11}
    outputcount=2
    picked=Ada
  1. useEmpty ← true, names ← List(), picked ← none, count ← 0, names.length ← 0

    1object Main {2  def main(args: Array[String]): Unit = {3    val useEmpty→ true = true4    val names→ List(): List[String] = if (useEmptytrue) List.empty[String] else List("Ada", "Lin")5    val picked→ none = names.headOptionNone.getOrElse("none")6    val count→ 0 = names.length→ 078    println("count=" + count0)9    println("picked=" + pickednone)10  }11}
    outputcount=0
    picked=none