开发者

enum in ordered list or set

I want to create an ordered set, or list, and add enums to the collection so they are inserted in enum order.

开发者_如何学Python Can I do this without creating an explicit comparator? Is there a collection that will use the inherent order of the enum to maintain the order in the collection?

Example in Groovy of what I want to do (I expect it will be similar for Java with a for loop instead of a closure):

TreeSet<TransactionElement> elements = new TreeSet<TransactionElement>() 
        elementList.each{ element -> elements.add(element)}

TransactionElement is an enum and the elements should be added to the TreeSet in the order they are listed in the enum

UPDATE: Solution I went with:

EnumSet<TransactionElement> elements = EnumSet.noneOf(TransactionElement.class); 
        elementList.each{ element -> elements.add(element)}

Some great examples of how to use EnumSet and EnumMap here


If you want a Set of enum values, then EnumSet is probably your best bet. Not only is it more efficient that using a non-specialized Set, it also guarantees that the iteration will work in the natural order of the enum.


Maybe you could tale a look at the EnumSet implementation.


By default Enums declaration order defines the natural ordering of the Enums. From javadoc of compareTo:

Enum constants are only comparable to other enum constants of the same enum type. The natural order implemented by this method is the order in which the constants are declared.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜