Вот еще один возможный способ, который ближе к @Antot, но ИМХО намного проще.
Что неясно в вашем исходном коде, так это то, откуда на самом деле берутся isVegetarian
и shouldBeSpicy
. Здесь я предполагаю, что существует класс PizzaConf
, как указано ниже, чтобы обеспечить эти параметры конфигурации
case class PizzaConf(isVegetarian: Boolean, shouldBeSpicy: Boolean)
Предполагая это, я думаю, что самый простой способ - это иметь allIngredients
типа List[(String, Function1[PizzaConf, Boolean])]
типа, то есть тот, который хранит ингредиенты и функции для проверки их соответствующей доступности. Учитывая, что buildIngredients
становится тривиальным:
val allIngredients: List[(String, Function1[PizzaConf, Boolean])] = List(
("Pepperoni", conf => conf.isVegetarian),
("Jalapeno", conf => conf.shouldBeSpicy)
)
def buildIngredients(pizzaConf: PizzaConf): List[String] = {
allIngredients
.filter(_._2(pizzaConf))
.map(_._1)
}
или вы можете объединить filter
и map
, используя collect
, как показано ниже:
def buildIngredients(pizzaConf: PizzaConf): List[String] =
allIngredients.collect({ case (ing, cond) if cond(pizzaConf) => ing })