如果与给定的字符串匹配,如何返回Enum

时间:2018-11-20 08:27:25

标签: java java-ee enums enumeration enumerate

我具有如下所示的Enum类

public enum AlgorithmEnum {

    SHA512("RSA", "SHA512", 1), SHA1("RSA", "SHA1", 1), SHA384("RSA", "SHA384", 1);

    private String keyAlgorithm;
    private String hashAlgorithm;
    private Integer key;

    private AlgorithmEnum(String keyAlgorithm, String hashAlgorithm, Integer key) {
        this.keyAlgorithm = keyAlgorithm;
        this.hashAlgorithm = hashAlgorithm;
        this.key = key;
    }

    public String getKeyAlgorithm() {
        return keyAlgorithm;
    }

    public void setKeyAlgorithm(String keyAlgorithm) {
        this.keyAlgorithm = keyAlgorithm;
    }

    public String getHashAlgorithm() {
        return hashAlgorithm;
    }

    public void setHashAlgorithm(String hashAlgorithm) {
        this.hashAlgorithm = hashAlgorithm;
    }

    public Integer getKey() {
        return key;
    }

    public void setKey(Integer key) {
        this.key = key;
    }
}

我需要有类似下面的方法,该方法将输入作为字符串并返回Enum

public AlgorithmEnum getAlgorithm(String algorithm){
        //returns AlgorithmEnum object
    }

我将通过传递“ SHA512withRSA”作为getAlgorithm方法的输入来调用上述方法。

在实现getAlgorithm方法时需要帮助。

4 个答案:

答案 0 :(得分:1)

假设所有传递给方法RevealBackground="{ThemeResource ListViewItemRevealBackground}"的字符串值都以getAlgorithm()结尾,则可以使用以下内容来获取枚举值:

withRSA

答案 1 :(得分:1)

您可以拥有类似的内容:

public static AlgorithmEnum getAlgorithm(final String algorithm)
        throws IllegalArgumentException
    {
        for (final AlgorithmEnum algorithmEnum : AlgorithmEnum.values())
        {
            if (algorithm.equalsIgnoreCase(String.format("%swith%s", algorithmEnum.getHashAlgorithm(), algorithmEnum.getKeyAlgorithm())))
            {
                return algorithmEnum;
            }
        }
        throw new IllegalArgumentException("Unknown algorithm: " + algorithm);
    }

但是,我不建议使用这种方法。而是使用2个不同的参数而不是单个String。

答案 2 :(得分:0)

您可以检查给定的String是否包含与某些enum语句匹配的if属性之一的值:

public AlgorithmEnum getAlgorithm(String algorithm) {
    if (algorithm.contains("SHA1")) {
        return SHA1;
    } else if (algorithm.contains("SHA512")) {
        return SHA512;
    } else if (algorithm.contains("SHA384")) {
        return SHA384;
    } else {
        return null;
    }
}
  

请注意,这也将与String之类的"SHA512withoutRSA"相匹配...

也许像

public AlgorithmEnum getAlgorithm(String keyAlgorithm, String hashAlgorithm)

会更好。但是,您必须然后提供两个参数。

答案 3 :(得分:0)

我将为您提供我在类似案例中的工作方式示例,您可以轻松地使其适应您的需求:

private static Map<Integer, YourEnum> valuesById = new HashMap<>();
private static Map<String, YourEnum> valuesByCode = new HashMap<>();

    static {
        Arrays.stream(YourEnum.values()).forEach(value -> valuesById.put(value.reasonId, value));
        Arrays.stream(YourEnum.values()).forEach(value -> valuesByCode.put(value.reasonCode, value));
    }


    public static YourEnum getByReasonId(int endReason) {
        return valuesById.get(endReason);
    }