java - 验证枚举结构中的值

标签 java

我使用此 JUnit 测试来从数据库加载值并将其保存回来。到目前为止,这是当前的实现:

public class BitStringTest {

    Map<FeatureBitString, Boolean> features = new HashMap<>();

    public void enableFeature(FeatureBitString feature) {
        features.put(feature, true);
    }

    public void disableFeature(FeatureBitString feature) {
        features.put(feature, false);
    }

    public boolean isFeatureEnabled(FeatureBitString feature) {
        Boolean enabled = features.get(feature);
        return enabled != null && enabled;
    }

    public String convertToDatabaseValue() {
        return Arrays.stream(FeatureBitString.values()).map(f -> isFeatureEnabled(f) ? "1" : "0").collect(joining());
    }

    public Map<FeatureBitString, Boolean> initFromDatabaseValue(String bitString) {
        // Note that, bitString length should equals to your number of feature. Or you
        // have to padding it
        char[] bitArray = bitString.toCharArray();
        return Arrays.stream(FeatureBitString.values())
                .collect(toMap(f -> f, f -> bitArray[f.getIndex()] == '1', (v1, v2) -> v2, LinkedHashMap::new));
    }

    @Test
    public void testToDatabaseValue() {
        System.out.println("\nProducing Features ");
        features.put(FeatureBitString.A, true);
        features.put(FeatureBitString.F, true);
        Assertions.assertEquals(convertToDatabaseValue(), "1000010");
    }
}

enum FeatureBitString {
    A("Type1", 0), // index 0 in bit string
    B("Type2", 1), // index 1 in bit String
    C("Type3", 2), // index 2 in bit String
    D("Type3", 3), // index 3 in bit String
    E("Type4", 4), // index 4 in bit String
    F("Type5", 5), // index 5 in bit String
    G("Type6", 6); // index 6 in bit String

    private final String featureName;
    private final int index;

    private FeatureBitString(String featureName, int value) {
        this.featureName = featureName;
        this.index = value;
    }

    public String getFeatureName() {
        return featureName;
    }

    public int getIndex() {
        return index;
    }
}

我如何验证枚举FeatureBitString中是否存在值“Type2”?在加载之前,我想检查该值是否根据枚举数据存在。

最佳答案

public static Optional<FeatureBitString> getByFeatureName(String featureName) {
    return Optional.of(values()).map(FeatureBitString::getFeatureName).filter(f -> f.equals(featureName)).findAny();
}

if (FeatureBitString.getByFeatureName("Type2").isPresent()) { // ...

关于java - 验证枚举结构中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55499018/

相关文章:

java - 从布局/Activity 的顶部开始

java - Java SE 5 日志记录的更新

java - 如何为 junit @Test 的 "expected"属性使用变量?

java - 处理可移植 JAR 中的路径

java - for循环中字符串无法转换为int

java - 从特定 Web 应用程序的 Jetty 类路径中排除 lib/ext

java - Maven 构建仅在使用 jenkins 运行时失败

java - 如何在Java Reactor中阻塞调用后重新抛出错误?

java - 通过 Person 对象的 getName() 属性将 Person 对象列表转换为单独的 String

java - 使用Spring Boot时如何运行所有测试类但只启动一次嵌入式Tomcat?