Java标准库中是否有某种方法可以从一组枚举中获取最小的枚举?
考虑一个由枚举类型组成的集合。是否有一些库方法 min
(或 max
)接受此集合(或可变参数)并返回最小/最大值?
编辑:我的意思是枚举的自然顺序,由其 Comparable
的 compare
实现定义。
Consider a collection consisting of enum types. Is there some library method min
(or max
) which accepts this collection (or varargs) and returns the smallest/highest value?
EDIT: I meant the natural order of enums, as defined by their compare
implementation of Comparable
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
枚举实现
Comparable
(其中E 是 Enum
),它们的自然顺序是声明枚举常量的顺序。您可以使用它们的默认 Comparable 实现来获取声明的 max 和 min 常量:
然后您可以使用:
可能,更快的方法是直接访问
values()
方法返回的数组:请注意,赋予枚举的参数对排序没有影响。
Enums implement
Comparable<E>
(whereE is Enum<E>
) and their natural order is the order in which the enum constants are declared.You can use their default Comparable implementation to get the max and min constants as declared:
Then you can use:
Probably, a faster way would be to use direct access to the array returned by the
values()
method:Note that the parameter given to the enum has no effect in the ordering.
如果您有一些
Set
,它应该已经是EnumSet
类型。遗憾的是,此类不提供first
和last
方法,但它确实保证按递增顺序进行迭代,因此您可以可靠地使用第一个和最后一个元素等在 thatSet.toArray() 中。If you have some
Set<MyEnum>
, it should already be of typeEnumSet
. Sadly, this class does not providefirst
andlast
methods, but it does guarantee to iterate in increasing order, so you can reliably use, for example, the first and last elements inthatSet.toArray()
.如果您想要自定义排序(例如按字母顺序),请在任何集合上使用自定义比较器
如果您想保留声明的顺序,请将它们放入 SortedSet 中
If you want custom ordering (say alphabetical), use a custom comparator on any collection
If you want to keep the declared order, put them into a SortedSet