说例如
scala> case class Entitlement(read: Boolean, edit: Boolean, create: Boolean, delete: Boolean)
defined class Entitlement
scala> List (Entitlement(read= true, edit = true, create= false, delete =false),Entitlement(read= true, edit = false, create= false, delete =false),Entitlement(read= true, edit = true, create= false, delete =true))
res0: List[Entitlement] = List(Entitlement(true,true,false,false),
Entitlement(true,false,false,false), Entitlement(true,true,false,true))
有没有办法通过列表Entitlement(true,true,false,true)
的单次传递创建一个res0
只有read=true
,这样它就可以通过列表,如果read
找到了&else default value for read=false
#39; s最终的edit=true
权限edit
- 如果else default value for edit=false
发现最后的create=false
权限Entitlement
,依此类推。在List
中所有Entitlement(true,true,false,true)
元素的玩具示例revision
中,为什么最终结果将是
revision
答案 0 :(得分:3)
您可以将列表和or
折叠为Entitlement
的相应值。您从Entitlement
开始,所有值都设置为false。
res0.fold(Entitlement(false, false, false, false))((e1, e2) =>
Entitlement(
e1.read || e2.read,
e1.edit || e2.edit,
e1.create || e.create,
e1.delete || e2.delete))
答案 1 :(得分:0)
你也可以通过减少来实现同样的目标。以下是一个例子。这里的优点是您不需要传递初始值,而且更直观。
res0.reduce((e1, e2) => Entitlement(e1.read | e2.read, e1.edit | e2.edit, e1.create | e2.create, e1.delete | e2.delete))