Scala for/yield Example

0

In for loop example, we have seen how to iterate through the values. Suppose for each iterated element, we want to do some processing and return some information, in such case, we need to use a combination of for/yield.

We need to prefix the body of the for expression by the keyword yield, process the element in the block that follows yield and return the value.
When the for loop ends, the result will be in the form of a collection containing the yielded values.

Syntax of for yield:

for clauses yield body

For/Yield Example

Let’s see an example.

In the below example, we iterate through some skills, filter the programming languages and print the remaining skills.
As we iterate, we filter the skill if it is a programming language. The yield block contains the object to be returned.

ForYieldExample:

object ForYieldExample {
  val skills = Array("Java", "Ruby", "Scala", "Spring", "JUnit", "TestNG", "Tomcat");
  val nonLanguageSkills = for (
    skill

Output:

Spring,JUnit,TestNG,Tomcat

More stuff in For/Yield Block

In our above example, we simply used yield to return the iterated element. In this example, we want to do something more in the yield block.

Let’s improve the above example, add more ‘Spring’ specific skills like ‘Spring Data’, ‘Spring Core’ etc.
If the skill is ‘Spring’ specific we want to simply return ‘Spring’ else the skill itself. To do this, we have added a simple if statement in the yield block.

if (skill contains "Spring") "spring" else skill

ForYieldBlockExample:

object ForYieldBlockExample {
  val skills = Array("Java", "Ruby", "Scala", "Spring Data", "Spring Core", "Spring Integration", "JUnit", "TestNG", "Tomcat");
  val nonLanguageSkills = for (
    skill <- skills 
    if skill != "Java" 
    if skill != "Ruby"
    if skill != "Scala"
  ) yield { if (skill contains "Spring") "spring" else skill }
  nonLanguageSkills.toSet.mkString(",").foreach(print)

  def main(args: Array[String]): Unit = {
  }
}

Output:

spring,JUnit,TestNG,Tomcat

Download the source code

This was an example about for/yield combination. You can download the source code here: forYieldExample.zip

Share.

Comments are closed.