I want to bundle a bunch of filters, but I don't want the overhead associated with creating multiple lists.
type StringFilter = (String) => Boolean
def nameFilter(value: String): StringFilter =
(s: String) => s == value
def lengthFilter(length: Int): StringFilter =
(s: String) => s.length == length
val list = List("Apple", "Orange")
The problem is that it builds a list after each filter:
list.filter(nameFilter("Apples")).filter(lengthFilter(5))
// list of string -> list of name filtered string -> list of name and length filtered string
I want to:
// list of string -> list of name and length filtered string
I will find out what filters are needed at runtime, so I have to add filters dynamically.
val filterPipe: StringFilter = ???
filterPipe.add(nameFilter("Apples")
filterPipe.add(lengthFilter(5))
list.filter(filterPipe)
How can i implement filterPipe?
Is there a way to recursively AND filter conditions together in filterPipe (which itself is a StringFilter)?
source
share