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