Scala 基于布尔值填充枚举集

Scala 基于布尔值填充枚举集,scala,playframework-2.0,Scala,Playframework 2.0,我有一套:为了论证起见,让我们称之为果篮:套[果] Fruitenum的值有Apple、Pear和Orange 我想用以下内容填充果篮: Apple如果布尔值hasaapple为真 Pear如果布尔值hasPear为真 Orange如果布尔值hasaorange为真 例如,如果这三个布尔值都为真,foultbasket将包含Apple、Pear和Orange 请问,在Scala中,语法上最简洁的方法是什么 现实生活中的用例是一个处理复选框的表单映射。我不喜欢我当前的实现,这感觉很笨拙: va

我有一套:为了论证起见,让我们称之为
果篮:套[果]

Fruit
enum的值有
Apple
Pear
Orange

我想用以下内容填充
果篮

  • Apple
    如果布尔值
    hasaapple
    为真
  • Pear
    如果布尔值
    hasPear
    为真
  • Orange
    如果布尔值
    hasaorange
    为真
例如,如果这三个布尔值都为真,
foultbasket
将包含
Apple
Pear
Orange

请问,在Scala中,语法上最简洁的方法是什么

现实生活中的用例是一个处理复选框的表单映射。我不喜欢我当前的实现,这感觉很笨拙:

var modes = Set[ExchangeMode]()
if (exchangeModeL) modes += LenderHosts
if (exchangeModeD) modes += DropOffToBorrower
if (exchangeModeP) modes += AtPublicPlace
modes
这个怎么样:

val modes = Map(
  LenderHosts       -> exchangeModeL, 
  DropOffToBorrower -> exchangeModeD, 
  AtPublicPlace     -> exchangeModeP
) filter (_._2) keySet

如果您更喜欢理解和模式匹配元组:

for {
  (b, v) <- Set(hasApple->Apple, hasPear->Pear, hasOrange->Orange) if b
} yield v
用于{
(b,v)苹果,哈斯皮尔->梨,哈斯橘->橘子)如果b
}产量v