The Scala collections API defines the exists
method on all its classes. The exists
method takes a predicate. If any item in the collection meets the predicate, exists
returns true
. Otherwise, it returns false
.
List(1, 3, 5, 7, 9) exists { _ == 3 } // res0: Boolean = true (1 to 12) exists { _ < 1 } // res1: Boolean = false Array(1, 3, 5, 7, 9) exists { _ % 3 == 0 } // res2: Boolean = true Set(1, 3, 5, 7, 9) exists { _ % 2 == 0 } // res3: Boolean = false
Strings are collections/sequences of characters, so both of the following are valid:
"asdf" exists { _ == 's' } // res4: Boolean = true "asdf" exists { _ == 'b' } // res5: Boolean = false
The Map
module also defines an exists
function, but the predicate takes two inputs: one for the key and one for the value.
val m = Map("A" -> 1, "B" -> 2, "C" -> 4, "D" -> 8) m exists { _ == "D" -> 8 } // res6: Boolean = true
And of course, if you want to test only the key or only the value, only test the first field or the second field, respectively, of the input tuple.
m exists { _._1 == "Z" } // res7: Boolean = false m exists { _._2 == 2 } // res8: Boolean = true
Option
also defines an exists
method. If the option is Some
, then exists
applies the predicate to the value in the Some
instance and returns the result. If the option is None
, then exists
always returns false
(as the REPL is kind enough to point out to us).
Some("X") exists { _ == "X" } // res9: Boolean = true Some("X") exists { _ == "Y" } // res10: Boolean = false None exists { _ == "X" } // <console>:8: warning: // comparing values of types // Nothing and String using // `==' will always yield false // None exists { _ == "X" } // ^ // res11: Boolean = false