{"id":2665,"date":"2015-09-23T01:37:17","date_gmt":"2015-09-23T01:37:17","guid":{"rendered":"http:\/\/www.garysieling.com\/blog\/?p=2665"},"modified":"2015-09-23T01:37:17","modified_gmt":"2015-09-23T01:37:17","slug":"scala-headoption-example","status":"publish","type":"post","link":"https:\/\/www.garysieling.com\/blog\/scala-headoption-example\/","title":{"rendered":"Scala headOption example"},"content":{"rendered":"<p>The scala collections API provides a function called &#8220;headOption&#8221;, which returns a Some(value) if there is an item in a list, and a &#8220;None&#8221; otherwise.<\/p>\n<p>Observe:<\/p>\n<pre lang=\"scala\">\nscala> List(1).headOption\nres35: Option[Int] = Some(1)\n\nscala> List().headOption\nres36: Option[Nothing] = None\n<\/pre>\n<p>It may not be immediately obvious why this is useful, especially if you&#8217;re coming from Java, or similar languages.<\/p>\n<p>However, it is quite useful, because you can use it to detect the end-of-sequence condition (without knowing why the sequence ends &#8211; it&#8217;d behave the same if it was a network socket, as if it was an array)<\/p>\n<p>For instance, lets say you decided to count the number of items in the sequence, using recursion. If you did this, you could pattern match the value of headOption to see if you were done:<\/p>\n<pre lang=\"sql\">\nval count: (Seq[Any]) => Int = \n  (values: Seq[Any]) => { \n    values.headOption match { \n      case Some(_) => 1 + count(values.tail) \n      case None => 0 \n    }\n  }\n\nscala> count(List(1,2,3))\nres37: Int = 3\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>The scala collections API provides a function called &#8220;headOption&#8221;, which returns a Some(value) if there is an item in a list, and a &#8220;None&#8221; otherwise. Observe: scala> List(1).headOption res35: Option[Int] = Some(1) scala> List().headOption res36: Option[Nothing] = None It may not be immediately obvious why this is useful, especially if you&#8217;re coming from Java, or &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.garysieling.com\/blog\/scala-headoption-example\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Scala headOption example&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[4],"tags":[480,482,488],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.9 - aioseo.com -->\n\t<meta name=\"description\" content=\"The scala collections API provides a function called &quot;headOption&quot;, which returns a Some(value) if there is an item in a list, and a &quot;None&quot; otherwise. Observe: scala&gt; List(1).headOption res35: Option[Int] = Some(1) scala&gt; List().headOption res36: Option[Nothing] = None It may not be immediately obvious why this is useful, especially if you&#039;re coming from Java, or\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"gary\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.garysieling.com\/blog\/scala-headoption-example\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.9\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Gary Sieling - Software Engineer\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Scala headOption example - Gary Sieling\" \/>\n\t\t<meta property=\"og:description\" content=\"The scala collections API provides a function called &quot;headOption&quot;, which returns a Some(value) if there is an item in a list, and a &quot;None&quot; otherwise. Observe: scala&gt; List(1).headOption res35: Option[Int] = Some(1) scala&gt; List().headOption res36: Option[Nothing] = None It may not be immediately obvious why this is useful, especially if you&#039;re coming from Java, or\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.garysieling.com\/blog\/scala-headoption-example\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2015-09-23T01:37:17+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2015-09-23T01:37:17+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Scala headOption example - Gary Sieling\" \/>\n\t\t<meta name=\"twitter:description\" content=\"The scala collections API provides a function called &quot;headOption&quot;, which returns a Some(value) if there is an item in a list, and a &quot;None&quot; otherwise. Observe: scala&gt; List(1).headOption res35: Option[Int] = Some(1) scala&gt; List().headOption res36: Option[Nothing] = None It may not be immediately obvious why this is useful, especially if you&#039;re coming from Java, or\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-headoption-example\\\/#blogposting\",\"name\":\"Scala headOption example - Gary Sieling\",\"headline\":\"Scala headOption example\",\"author\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\"},\"datePublished\":\"2015-09-23T01:37:17+00:00\",\"dateModified\":\"2015-09-23T01:37:17+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-headoption-example\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-headoption-example\\\/#webpage\"},\"articleSection\":\"Code Examples, scala, scala-collections, scala-reference\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-headoption-example\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.garysieling.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/#listItem\",\"name\":\"Code Examples\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/#listItem\",\"position\":2,\"name\":\"Code Examples\",\"item\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-headoption-example\\\/#listItem\",\"name\":\"Scala headOption example\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-headoption-example\\\/#listItem\",\"position\":3,\"name\":\"Scala headOption example\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/#listItem\",\"name\":\"Code Examples\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\",\"name\":\"Gary Sieling\",\"description\":\"Software Engineer\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/\",\"name\":\"gary\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-headoption-example\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0be925276d848ffe98a6a9dc8cf33e67?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"gary\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-headoption-example\\\/#webpage\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-headoption-example\\\/\",\"name\":\"Scala headOption example - Gary Sieling\",\"description\":\"The scala collections API provides a function called \\\"headOption\\\", which returns a Some(value) if there is an item in a list, and a \\\"None\\\" otherwise. Observe: scala> List(1).headOption res35: Option[Int] = Some(1) scala> List().headOption res36: Option[Nothing] = None It may not be immediately obvious why this is useful, especially if you're coming from Java, or\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-headoption-example\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"datePublished\":\"2015-09-23T01:37:17+00:00\",\"dateModified\":\"2015-09-23T01:37:17+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/\",\"name\":\"Gary Sieling\",\"description\":\"Software Engineer\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Scala headOption example - Gary Sieling","description":"The scala collections API provides a function called \"headOption\", which returns a Some(value) if there is an item in a list, and a \"None\" otherwise. Observe: scala> List(1).headOption res35: Option[Int] = Some(1) scala> List().headOption res36: Option[Nothing] = None It may not be immediately obvious why this is useful, especially if you're coming from Java, or","canonical_url":"https:\/\/www.garysieling.com\/blog\/scala-headoption-example\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.garysieling.com\/blog\/scala-headoption-example\/#blogposting","name":"Scala headOption example - Gary Sieling","headline":"Scala headOption example","author":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"publisher":{"@id":"https:\/\/www.garysieling.com\/blog\/#organization"},"datePublished":"2015-09-23T01:37:17+00:00","dateModified":"2015-09-23T01:37:17+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/www.garysieling.com\/blog\/scala-headoption-example\/#webpage"},"isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/scala-headoption-example\/#webpage"},"articleSection":"Code Examples, scala, scala-collections, scala-reference"},{"@type":"BreadcrumbList","@id":"https:\/\/www.garysieling.com\/blog\/scala-headoption-example\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog#listItem","position":1,"name":"Home","item":"https:\/\/www.garysieling.com\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/#listItem","name":"Code Examples"}},{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/#listItem","position":2,"name":"Code Examples","item":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/scala-headoption-example\/#listItem","name":"Scala headOption example"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/scala-headoption-example\/#listItem","position":3,"name":"Scala headOption example","previousItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/#listItem","name":"Code Examples"}}]},{"@type":"Organization","@id":"https:\/\/www.garysieling.com\/blog\/#organization","name":"Gary Sieling","description":"Software Engineer","url":"https:\/\/www.garysieling.com\/blog\/"},{"@type":"Person","@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author","url":"https:\/\/www.garysieling.com\/blog\/author\/gary\/","name":"gary","image":{"@type":"ImageObject","@id":"https:\/\/www.garysieling.com\/blog\/scala-headoption-example\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/0be925276d848ffe98a6a9dc8cf33e67?s=96&d=identicon&r=g","width":96,"height":96,"caption":"gary"}},{"@type":"WebPage","@id":"https:\/\/www.garysieling.com\/blog\/scala-headoption-example\/#webpage","url":"https:\/\/www.garysieling.com\/blog\/scala-headoption-example\/","name":"Scala headOption example - Gary Sieling","description":"The scala collections API provides a function called \"headOption\", which returns a Some(value) if there is an item in a list, and a \"None\" otherwise. Observe: scala> List(1).headOption res35: Option[Int] = Some(1) scala> List().headOption res36: Option[Nothing] = None It may not be immediately obvious why this is useful, especially if you're coming from Java, or","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.garysieling.com\/blog\/scala-headoption-example\/#breadcrumblist"},"author":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"creator":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"datePublished":"2015-09-23T01:37:17+00:00","dateModified":"2015-09-23T01:37:17+00:00"},{"@type":"WebSite","@id":"https:\/\/www.garysieling.com\/blog\/#website","url":"https:\/\/www.garysieling.com\/blog\/","name":"Gary Sieling","description":"Software Engineer","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.garysieling.com\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Gary Sieling - Software Engineer","og:type":"article","og:title":"Scala headOption example - Gary Sieling","og:description":"The scala collections API provides a function called &quot;headOption&quot;, which returns a Some(value) if there is an item in a list, and a &quot;None&quot; otherwise. Observe: scala&gt; List(1).headOption res35: Option[Int] = Some(1) scala&gt; List().headOption res36: Option[Nothing] = None It may not be immediately obvious why this is useful, especially if you're coming from Java, or","og:url":"https:\/\/www.garysieling.com\/blog\/scala-headoption-example\/","article:published_time":"2015-09-23T01:37:17+00:00","article:modified_time":"2015-09-23T01:37:17+00:00","twitter:card":"summary_large_image","twitter:title":"Scala headOption example - Gary Sieling","twitter:description":"The scala collections API provides a function called &quot;headOption&quot;, which returns a Some(value) if there is an item in a list, and a &quot;None&quot; otherwise. Observe: scala&gt; List(1).headOption res35: Option[Int] = Some(1) scala&gt; List().headOption res36: Option[Nothing] = None It may not be immediately obvious why this is useful, especially if you're coming from Java, or"},"aioseo_meta_data":{"post_id":"2665","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2023-02-04 16:32:30","updated":"2026-07-06 01:20:54","ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.garysieling.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/\" title=\"Code Examples\">Code Examples<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tScala headOption example\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.garysieling.com\/blog"},{"label":"Code Examples","link":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/"},{"label":"Scala headOption example","link":"https:\/\/www.garysieling.com\/blog\/scala-headoption-example\/"}],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/2665"}],"collection":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/comments?post=2665"}],"version-history":[{"count":0,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/2665\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/media?parent=2665"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/categories?post=2665"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/tags?post=2665"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}