Let’s say we want to find all three-pair additions that equate to 10 (order is irrelevant so we don’t want dups). What we would normally do in imperative Java would be 3 nested for loops with indexes say i, j and k where i ranges from 1 till 10, j starts from i+1 and k starts from j+1. The body of the for loop would be the if predicate case. We would also need a variable to store the results.
Instead in Scala:
val l = List(1,2,3,4,5,6,7,8,9,10)
for {
(a,i) <- l.zipWithIndex
(b,j) <- l.zipWithIndex.drop(i+1)
c <- l.drop(j+1)
if 10 == a + b + c
} println(s"$a $b $c")
We can also use for comprehension with yield as a returned assignable result rather than println