1

我有以下 Java 枚举:

public enum CertificateType {

    EMAIL("Email"),

    NATURAL_QUALIFIED("Qualified"),

    PSEUDONYMOUS_QUALIFIED("Qualified");

    public final String NAME;

    private CertificateType( final String name ) {
    this.NAME = name;
    }

}

我想做的就是将该枚举转换为 Map[enum as String, enum.NAME] 以在 Play Framework@select函数中使用。通过枚举作为字符串,我的意思是“EMAIL”或“NATURAL_QUALIFIED”

对于对象列表,我会使用该.map函数,如下所示:

Organization.all.map(org => (org.id.toString, org.name))(collection.breakOut)

但我认为我不能修改它以使用枚举。

我怎样才能做到这一点?

编辑:注释与 Scala 无关,而是 Play 的 ORM 注释。上面的代码是一个 Java 枚举。枚举值是指每个枚举,如 EMAIL、NATURAL_QUALIFIED 等。

一个示例 key=>value 对将是 "EMAIL"=>"Email"

编辑 2:为清楚起见,我删除了枚举上的注释。

4

2 回答 2

2
CertificateType.values.map(e => (e.name -> e.NAME) ).toMap
于 2013-09-18T16:40:17.553 回答
0

去掉我不熟悉的scala部分,你能不能不做这样的事情?

public enum CertificateType {
    EMAIL("Email"),

    NATURAL_QUALIFIED("Qualified"),

    PSEUDONYMOUS_QUALIFIED("Qualified");

    public final String NAME;
    private static Map<CertificateType, String> map = new HashMap<CertificateType, String>();

    private CertificateType( final String name ) {
        this.NAME = name;
        map.put(this, this.NAME);
    }

    public Map<CertificateType, String> getMap()
    {   //Return a copy so that any modifications a 
        //user might make won't propagate back to the stored map
        return new HashMap<CertificateType, String>(map);
    }
}
于 2013-09-18T16:34:01.700 回答