我有以下课程:
case class RolepermissionRow(roleid: Int, permissionid: Int)
和
case class RolePermissionJSON(
var id: Option[Long],
var num: Option[Int],
var name: Option[String],
var perms: Map[String, Boolean])
我创建了一张地图:
var s = Map("1" -> true)
我创建了一个RolePermissionJSON:
val f = RolePermissionJSON(Some(0), Some(0), Some('test'), s)
我想使用以下代码将perms Map转换为RolepermissionRow:
scala> f.perms.map { case (key, value) => if (value) RolepermissionRow(key.toInt, 1) }.toSeq
res7: Seq[Any] = List(RolepermissionRow(1,1))
结果是Seq[Any]
,但我希望Seq[RolepermissionRow]
答案 0 :(得分:3)
需要进行简单的更改:
val z = f.perms.map { case (key, value) if (value) => RolepermissionRow(key.toInt, 1) }.toSeq
现在描述:
如果Seq
RolepermissionRow
为value
,则代码true
包含Unit
,否则为Unit
。
您应该过滤出地图中的“空”元素,为您提供collect
。
UPD:
@nafg建议使用interface I{};
class A : I{};
class B : I{};
I mything = someBoolCondition ? new A : new B;
来防止运行时出现匹配错误。
答案 1 :(得分:1)
f.perms.filter(_._2).map{case (key, value) => RolepermissionRow(key.toInt, 1) }.toSeq
我认为您应首先使用filter
来过滤地图,避免空Map
。