在 groovy 或 java 中搜索枚举条目

Searching enum entries in groovy or java

我在 groovy 中创建了以下枚举:

enum Status {
    FAILED(0, "Failed"), 
    SUCCESSFUL(1, "Successful")

    private final int key
    private final String val
    public Status(int key, String val) {
        this.val = val
        this.key = key
    }
    String toString() { return val }
}

我想编写一个函数来搜索我的枚举 class 中 returns 为 Status.contains("Failed") 的条目。可以这样做吗?

你可以自己写必要的方法

下面是 java 中的示例:

enum Status {
    FAILED(0, "Failed"),
    SUCCESSFUL(1, "Successful");

    private final int key;
    private final String val;

    Status(int key, String val) {
        this.val = val;
        this.key = key;
    }

    public static Status containsName(String name) {
        for (Status status : Status.values()) {
            if (status.name().equalsIgnoreCase(name)) {
                return status;
            }
        }
        return null;
    }

    public static Status containsVal(String val) {
        for (Status status : Status.values()) {
            if (status.val.equalsIgnoreCase(val)) {
                return status;
            }
        }
        return null;
    }

    public String toString() { return val; }
}

方法 containsName returns 一个 Status 实例,如果它的名字等于一个参数。方法 containsValue returns 一个 Status 实例,如果它的值等于一个参数。

Status failed = Status.containsName("FAILED");
Status successful = Status.containsVal("Successful");

在 Groovy 中,您可以这样做:

enum Status {
    FAILED(0, 'Failed'), 
    SUCCESSFUL(1, 'Successful')

    private final int key
    private final String val

    public Status(int key, String val) {
        this.val = val
        this.key = key
    }

    String toString() { val }

    static boolean containsVal(String val) {
        Status.values()*.val.contains val
    }
}

assert Status.containsVal('Failed')