Java中使用范围的查找枚举

Cod*_*der 1 java enums

我有这个枚举:

public enum AccountRange {

    RANGE1("100,200"), RANGE2("201,300"), RANGE3("301,900");


    private final String rangeAccount;

    private static final Map<String, AccountRange> lookup = new HashMap<String, AccountRange>();

    static {
        for (AccountRange d : AccountRange.values()) {
            lookup.put(d.getRangeAccount(), d);
        }
    }

    private AccountRange(String rangeAccount) {
        this.rangeAccount = rangeAccount;
    }

    public String getRangeAccount() {
        return rangeAccount;
    }

    public static AccountRange get(String abbreviation) {
        return lookup.get(abbreviation);
    }

}
Run Code Online (Sandbox Code Playgroud)

要返回,RANGE1我需要使用以下方法调用枚举:AccountRange.get("100,200")

但是问题是我需要用一个简单的值来调用枚举,例如:

AccountRange.get("108")我需要枚举返回,RANGE1因为108在100到200之间的第一个范围内

AccountRange.get("600") 我需要枚举返回RANGE3

Mur*_*nik 5

您可以将范围存储为一对整数,并遍历枚举的值,以找到包含您要查找的参数的范围:

public enum AccountRange {

    RANGE1(100, 200), RANGE2(201, 300), RANGE3(301, 900);

    private final int min;
    private final int max;

    private AccountRange(int min, int max) {
        this.min = min;
        this.max = max;
    }

    public String getRangeAccount() {
        return String.format("%d,%d", min, max);
    }

    public static AccountRange get(int val) {
        return Arrays.stream(values())
                     .filter(r -> val >= r.min && val <= r.max)
                     .findFirst()
                     .orElse(null);
    }
}
Run Code Online (Sandbox Code Playgroud)