获取整个枚举中的字符串并返回枚举常量

时间:2017-03-25 16:46:24

标签: java enums

我用一些字符串作为属性制作了一个枚举。每个常量的字符串数量不同,所以我使用了varargs(我第一次这样做)。这是我的枚举:

enum CursorInfo {
    NORMAL("Walk-to"),
    TAKE("Take"),
    USE("Use"),
    TALK("Talk-to"),
    FISH("Net", "Bait", "Cage", "Harpo");

    String[] toolTip;

    CursorInfo(String... toolTip) {
        this.toolTip = toolTip;
    }
};

现在我希望能够输入类似的内容:

CursorInfo.getCursor("Bait");

然后我希望它返回:“FISH”或序数(我不介意它返回的内容),即:“4”。 我问过这个人,他说我应该把它添加到枚举中:

private static final Set<CursorInfo> SET = EnumSet.allOf(CursorInfo.class);

    public static Optional<CursorInfo> getCursor(String toolTip) {
        return SET.stream().filter(info -> Arrays.stream(info.toolTip).anyMatch(option -> option.contains(toolTip))).findAny();
    }

但我不知道如何使用它,如果这甚至有效。 简而言之:当我使用其中一个字符串作为参数时,如何返回枚举常量id / name?

1 个答案:

答案 0 :(得分:1)

我希望以下Snipped可以帮助您。当然,您可以使用Stream API简化它。但这个概念应该是明确的。

只需将此添加到您的枚举声明中即可。

public static CursorInfo getCursor(String search)
{
    for(CursorInfo cursorValue : CursorInfo.values())
    {
        for(String tool : cursorValue.toolTip)
        {
            if (search.equals(tool))
                return cursorValue;
        }
    }

    //proper error handling
    return null;
}