如何在groovy中生成枚举键/名称列表

Tri*_*hST 5 groovy enums

我在groovy中有以下枚举

public enum ImageTypes {

    jpg ("image/jpeg"),
    jpeg ("image/jpeg"),
    jpe ("image/jpeg"),
    jfif ("image/jpeg"),
    bmp ("image/bmp"),
    png ("image/png"),
    gif ("image/gif"),
    ief ("image/ief"),
    tiff ("image/tiff"),
    tif ("image/tiff"),
    pcx ("image/pcx"),
    pdf ("application/pdf"),

    final String value

    ImageTypes(String value) {
        this.value = value
    }

    String getValue() {
        return this.value
    }

    String toString(){
        value
    }

    String getKey() {
        name()
    }
}
Run Code Online (Sandbox Code Playgroud)

我想生成键或值的ArrayList <String>

我目前正在做的是循环遍历所有项目并构建数组列表,但我认为必须有一个简单的方法来做到这一点......

def imageTypes = ImageTypes.values()
def fileExts = new ArrayList<String>()
def mimeTypes = new ArrayList<String>()
for (type in imageTypes) {
    fileExts.add(type.key)
    mimeTypes.add(type.value)
}
Run Code Online (Sandbox Code Playgroud)

mnd*_*mnd 8

ArrayList的键

ImageTypes.values()*.name()

ArrayList的值

ImageTypes.values()*.value

这里有两点需要指出.

1)我正在使用spread运算符来对集合中的每个条目调用一个动作(虽然这种情况只是一个数组),这就是使用name()value引用的方式.

2)我name()用括号(作为方法)调用因为(我相信)它是枚举的隐式属性,而我只是value直接从ImageTypes对象中使用属性来获取值.


Swa*_*aps 5

扩展@mnd的答案 -

Spread Operator是最好的选择,但如果您使用 Jenkins,这将无法按原样工作。要运行,Spread Operator您需要添加@NonCPSJenkins Pipeline DSL.

获取键列表的另一种方法enum是直接使用其枚举功能。

ImageTypes.values().collect() { it.name() }
Run Code Online (Sandbox Code Playgroud)