{"id":2632,"date":"2015-09-18T01:50:55","date_gmt":"2015-09-18T01:50:55","guid":{"rendered":"http:\/\/www.garysieling.com\/blog\/?p=2632"},"modified":"2015-09-18T01:50:55","modified_gmt":"2015-09-18T01:50:55","slug":"scala-yield-example","status":"publish","type":"post","link":"https:\/\/www.garysieling.com\/blog\/scala-yield-example\/","title":{"rendered":"Scala yield example"},"content":{"rendered":"<p>Like Python, scala lets you use yield to generate sequences of values. In the simplest case, these appear to be exactly the same, but if you read on, you will find that Scala&#8217;s for comprehensions have a lot more options.<\/p>\n<p>For instance, take this contrived example: we generate an infinite stream (1 to infinity), loop over it, returning a new value.<\/p>\n<pre lang=\"scala\">\nvar x = Stream.from(1)\n\nval y = for (z <- x) yield z * 2\n\ny.take(10).toList\n\nres2: List[Int] = List(2, 4, 6, 8, 10, 12, 14, 16, 18, 20)\n<\/pre>\n<p>This does what we'd intuitively expect, similar to python or C#. It is the same as doing a \"map\", like so (although the map version is more terse):<\/p>\n<pre lang=\"scala\">\nvar x = Stream.from(1)\n\nval y = x.map(_ * 2)\n\ny.take(10).toList\n\nres2: List[Int] = List(2, 4, 6, 8, 10, 12, 14, 16, 18, 20)\n<\/pre>\n<p>The advantage of list comprehensions is that you can do a few at once, and they get run as nested loops (or rather, the nearly incomprehensible nested flatMap):<\/p>\n<pre lang=\"Scala\">\nval y = \n  for(\n    a <- List('a', 'b', 'c'); \n    b <- List(1,2,3)\n  ) \n    yield (a, b)\n\ny: List[(Char, Int)] = \n  List(\n    (a,1), (a,2), (a,3), \n    (b,1), (b,2), (b,3), \n    (c,1), (c,2), (c,3)\n  )\n\nres6: List[Int] = List(4, 8, 12, 16, 20, 24, 28, 32, 36, 40)\n<\/pre>\n<p>You can also put \"if\" in:<\/p>\n<pre lang=\"Scala\">\nval y = for (z <- x; if z % 2 == 0) yield z * 2\n\nres6: List[Int] = List(4, 8, 12, 16, 20, 24, 28, 32, 36, 40)\n<\/pre>\n<p>This is equivalent to doing:<\/p>\n<pre lang=\"scala\">\nx.filter(_ % 2 == 0).map(_ * 2)\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Like Python, scala lets you use yield to generate sequences of values. In the simplest case, these appear to be exactly the same, but if you read on, you will find that Scala&#8217;s for comprehensions have a lot more options. For instance, take this contrived example: we generate an infinite stream (1 to infinity), loop &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.garysieling.com\/blog\/scala-yield-example\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Scala yield 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=\"Like Python, scala lets you use yield to generate sequences of values. In the simplest case, these appear to be exactly the same, but if you read on, you will find that Scala&#039;s for comprehensions have a lot more options. For instance, take this contrived example: we generate an infinite stream (1 to infinity), loop\" \/>\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-yield-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 yield example - Gary Sieling\" \/>\n\t\t<meta property=\"og:description\" content=\"Like Python, scala lets you use yield to generate sequences of values. In the simplest case, these appear to be exactly the same, but if you read on, you will find that Scala&#039;s for comprehensions have a lot more options. For instance, take this contrived example: we generate an infinite stream (1 to infinity), loop\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.garysieling.com\/blog\/scala-yield-example\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2015-09-18T01:50:55+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2015-09-18T01:50:55+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Scala yield example - Gary Sieling\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Like Python, scala lets you use yield to generate sequences of values. In the simplest case, these appear to be exactly the same, but if you read on, you will find that Scala&#039;s for comprehensions have a lot more options. For instance, take this contrived example: we generate an infinite stream (1 to infinity), loop\" \/>\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-yield-example\\\/#blogposting\",\"name\":\"Scala yield example - Gary Sieling\",\"headline\":\"Scala yield example\",\"author\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\"},\"datePublished\":\"2015-09-18T01:50:55+00:00\",\"dateModified\":\"2015-09-18T01:50:55+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-yield-example\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-yield-example\\\/#webpage\"},\"articleSection\":\"Code Examples, scala, scala-collections, scala-reference\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-yield-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-yield-example\\\/#listItem\",\"name\":\"Scala yield example\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-yield-example\\\/#listItem\",\"position\":3,\"name\":\"Scala yield 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-yield-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-yield-example\\\/#webpage\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-yield-example\\\/\",\"name\":\"Scala yield example - Gary Sieling\",\"description\":\"Like Python, scala lets you use yield to generate sequences of values. In the simplest case, these appear to be exactly the same, but if you read on, you will find that Scala's for comprehensions have a lot more options. For instance, take this contrived example: we generate an infinite stream (1 to infinity), loop\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-yield-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-18T01:50:55+00:00\",\"dateModified\":\"2015-09-18T01:50:55+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 yield example - Gary Sieling","description":"Like Python, scala lets you use yield to generate sequences of values. In the simplest case, these appear to be exactly the same, but if you read on, you will find that Scala's for comprehensions have a lot more options. For instance, take this contrived example: we generate an infinite stream (1 to infinity), loop","canonical_url":"https:\/\/www.garysieling.com\/blog\/scala-yield-example\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.garysieling.com\/blog\/scala-yield-example\/#blogposting","name":"Scala yield example - Gary Sieling","headline":"Scala yield example","author":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"publisher":{"@id":"https:\/\/www.garysieling.com\/blog\/#organization"},"datePublished":"2015-09-18T01:50:55+00:00","dateModified":"2015-09-18T01:50:55+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/www.garysieling.com\/blog\/scala-yield-example\/#webpage"},"isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/scala-yield-example\/#webpage"},"articleSection":"Code Examples, scala, scala-collections, scala-reference"},{"@type":"BreadcrumbList","@id":"https:\/\/www.garysieling.com\/blog\/scala-yield-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-yield-example\/#listItem","name":"Scala yield example"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/scala-yield-example\/#listItem","position":3,"name":"Scala yield 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-yield-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-yield-example\/#webpage","url":"https:\/\/www.garysieling.com\/blog\/scala-yield-example\/","name":"Scala yield example - Gary Sieling","description":"Like Python, scala lets you use yield to generate sequences of values. In the simplest case, these appear to be exactly the same, but if you read on, you will find that Scala's for comprehensions have a lot more options. For instance, take this contrived example: we generate an infinite stream (1 to infinity), loop","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.garysieling.com\/blog\/scala-yield-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-18T01:50:55+00:00","dateModified":"2015-09-18T01:50:55+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 yield example - Gary Sieling","og:description":"Like Python, scala lets you use yield to generate sequences of values. In the simplest case, these appear to be exactly the same, but if you read on, you will find that Scala's for comprehensions have a lot more options. For instance, take this contrived example: we generate an infinite stream (1 to infinity), loop","og:url":"https:\/\/www.garysieling.com\/blog\/scala-yield-example\/","article:published_time":"2015-09-18T01:50:55+00:00","article:modified_time":"2015-09-18T01:50:55+00:00","twitter:card":"summary_large_image","twitter:title":"Scala yield example - Gary Sieling","twitter:description":"Like Python, scala lets you use yield to generate sequences of values. In the simplest case, these appear to be exactly the same, but if you read on, you will find that Scala's for comprehensions have a lot more options. For instance, take this contrived example: we generate an infinite stream (1 to infinity), loop"},"aioseo_meta_data":{"post_id":"2632","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:31:37","updated":"2026-07-06 01:18:36","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 yield 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 yield example","link":"https:\/\/www.garysieling.com\/blog\/scala-yield-example\/"}],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/2632"}],"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=2632"}],"version-history":[{"count":0,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/2632\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/media?parent=2632"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/categories?post=2632"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/tags?post=2632"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}