scala - 如何迭代包含特定值的枚举值?
问题描述
我有一个枚举,当我遍历这些值时,由于某种原因当前没有输出任何内容:
object UserType extends Enumeration {
type UserType = UTValue
protected case class UTValue(name: String, roles: Set[String]) extends super.Val {
// override def toString(): String = name
}
val anonymous = UTValue("anonymous", Set.empty)
val superUser = UTValue("super", Set("member", "admin", "edit", "delete"))
}
println(UserType.anonymous)
println(UserType.superUser)
println(UserType.values.map(println))
输出是:
anonymous
superUser
anonymous
superUser
TreeSet(())
为什么返回一个空的 TreeSet(())?
我的主要问题:如何遍历包含角色“成员”的所有枚举值。
UserType.values.filter(_.roles.contains("member"))
(scala 2.13.x)
解决方案
您正在地图内打印值,并且 println 返回单位,如果您在地图内删除 println,例如println(UserType.values.map(value => value))
object UserType extends Enumeration {
type UserType = UTValue
protected case class UTValue(name: String, roles: Set[String]) extends super.Val {
// override def toString(): String = name
}
val anonymous = UTValue("anonymous", Set.empty)
val superUser = UTValue("super", Set("member", "admin", "edit", "delete"))
}
println(UserType.anonymous)
println(UserType.superUser)
println(UserType.values.map(x => x))
而且由于它是 TreeSet,它会删除重复值并仅保留一个 Unit 值(),这就是您得到的原因TreeSet(())
推荐阅读
- amazon-web-services - 如何在 AWS 粘合作业中对列级安全性执行 ETL 操作?
- javascript - Reactjs 无法播放 SRC URL 中带有“#”的音频文件
- python - 如何将 JSON 格式的数据展平为 spark 数据框
- mysql - 无法将目录挂载到 docker
- c++ - 从 4 维 cv::Mat 中提取一个颜色通道
- symfony - 如何在 TYPO3 中使用 EventSubscriber,例如用于 symfony/工作流事件?
- csv - 想要更新 LoadRunner 中的现有 .csv 文件
- google-chrome-devtools - 生产服务器上禁止使用 Chrome Lighthouse 403
- xamarin.forms - 状态栏颜色显示在 xamarin 表单 iOS 的屏幕底部
- sql - 在像 SQL Server 一样在 MongoDB 中应用查询过滤器之前修改/清理字段值?