# Will.Whim

A weblog by Will Fitzgerald

## Scala filters

A random Scala note.

Today, I wanted to apply a list of filters to each item in a list, and return just those that pass each of the filters.

For example, given a range of integers, return just those that are divisible by 2 and by 3.

Let’s start by defining a boolean function divides:

`def divides(d:Int,i:Int) = if (i%d==0) true else false`

Note that divides(2,_:Int) defines the (partial) function for division by 2.

```(divides(2,_:Int))(2) => true
(divides(2,_:Int))(3) => false```

So we can create our filters so:

`val filters = divides(2,_:Int) :: divides(3,_:Int) :: Nil`

or

`val filters = List(divides(2,_:Int),divides(3,_:Int))`

Now, we can simply use Scala’s filter and forall functions to filter a range of integers:

```scala> Range(1,50).filter(x => filters.forall(f => f(x)))
res45: scala.collection.immutable.IndexedSeq[Int] =
Vector(6, 12, 18, 24, 30, 36, 42, 48)```

The filters could also be defined as a Set, but by creating them as a List, one can put the less expensive filters first.