Java 仅迭代枚举中以某些字符开头的值的最有效方法

Java 仅迭代枚举中以某些字符开头的值的最有效方法,java,string,enums,Java,String,Enums,我有一个枚举类,它有大量的值(用于数据库的转换键), 但在我的例子中,我只需要迭代以字符“c_foo_”开头的值 最具成本效益的方法是什么 我使用的是Java 14。您可以使用枚举值中的流来过滤掉您不感兴趣的内容 Arrays.stream(YourEnum.values()) .filter(e -> e.name().startsWith("c_foo_")) .forEach(...); 另一种可能的方法是,假定枚举值具有定义的顺序: publi

我有一个枚举类,它有大量的值(用于数据库的转换键), 但在我的例子中,我只需要迭代以字符“c_foo_”开头的值

最具成本效益的方法是什么


我使用的是Java 14。

您可以使用枚举值中的
来过滤掉您不感兴趣的内容

Arrays.stream(YourEnum.values())
    .filter(e -> e.name().startsWith("c_foo_"))
    .forEach(...);

另一种可能的方法是,假定枚举值具有定义的顺序:

public enum MyEnum {
    BAR, BAZ, DOO, FOO, GEE, MOO
}
您可以使用
EnumSet.range

EnumSet<MyEnum> set = EnumSet.range(MyEnum.BAZ, MyEnum.GEE);

请注意,第一个和最后一个元素都是包含的。

这是否回答了您的问题?如果您只对以某个前缀开头的值感兴趣,可以使用
Trie
PatriciaTrie
。Java本机不提供实现,但Apache Commons提供。这是一个有效的解决方案,但一般准则(例如,有效Java,第35项:实例字段而不是序号[Bloch])不建议依赖枚举的
ordinal()
方法。依赖字母数字顺序也意味着同样的情况。
[BAZ, DOO, FOO, GEE]