考虑一个包含枚举类型的集合。是否存在一些库方法
编辑:我指的是枚举的自然顺序,由它们
min
(或max
),该方法接受此集合(或可变参数)并返回最小/最大值?编辑:我指的是枚举的自然顺序,由它们
Comparable
的compare
实现定义。min
(或max
),该方法接受此集合(或可变参数)并返回最小/最大值?Comparable
的compare
实现定义。枚举实现了 Comparable<E>
接口(其中 E
是 Enum<E>
),它们的自然顺序是声明枚举常量的顺序。您可以使用它们默认的 Comparable 实现来获取已声明的最大和最小常量:
public enum BigCountries {
USA(312), INDIA(1210), CHINA(1330), BRAZIL (190);
private int population;
private BigCountries(int population) {
this.population = population;
}
}
然后您可以使用:
BigCountries first = Collections.min(Arrays.asList(BigCountries.values())); // USA
BigCountries last = Collections.max(Arrays.asList(BigCountries.values())); //BRAZIL
values()
方法返回的数组:BigCountries[] values = BigCountries.values();
System.out.println(values[0]); // USA;
System.out.println(values[values.length-1]); // BRAZIL;
Set<MyEnum>
,它应该已经是EnumSet
类型。不幸的是,这个类没有提供first
和last
方法,但它确保按递增顺序迭代,所以您可以可靠地使用thatSet.toArray()
中的第一个和最后一个元素。如果您想要自定义排序(例如按字母顺序),可以在任何集合上使用自定义比较器
class MyComparator implements Comparator<MyEnumType>
{
public int compare(MyEnumType enum1, MyEnumType enum2)
{
return o1.toString().compareTo(o1.toString());
}
}
如果你想保持声明的顺序,将它们放入 SortedSet 中。
SortedSet<MyEnumType> set = new TreeSet<MyEnumType>();
set.add(enum1);