首页 > 解决方案 > 如何迭代包含特定值的枚举值?

问题描述

我有一个枚举,当我遍历这些值时,由于某种原因当前没有输出任何内容:

 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)

标签: scala

解决方案


您正在地图内打印值,并且 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(())


推荐阅读