考虑一个由枚举类型组成的集合。是否有一些图书馆方法min
(或max
)接受此集合(或可变参数)并返回最小值/最大值?Java标准库中是否有一些方法可以从一组枚举中获得最小的枚举?
编辑:我的意思是枚举的自然顺序,如其compare
执行Comparable
的定义。
考虑一个由枚举类型组成的集合。是否有一些图书馆方法min
(或max
)接受此集合(或可变参数)并返回最小值/最大值?Java标准库中是否有一些方法可以从一组枚举中获得最小的枚举?
编辑:我的意思是枚举的自然顺序,如其compare
执行Comparable
的定义。
枚举实现Comparable<E>
(其中E is Enum<E>
)及其自然顺序是枚举常量声明的顺序。 您可以使用它们的默认可比实现以获得最大和最小常量声明:
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;
注意给予枚举的参数在排序没有影响。
如果你想自定义排序(比如按字母顺序排列),如果你想保留声明的顺序使用任何收集
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);
如果您有一些Set<MyEnum>
,它应该已经是EnumSet
类型。不幸的是,这个类没有提供first
和last
方法,但它确实保证按递增顺序进行迭代,因此您可以可靠地使用例如thatSet.toArray()
中的第一个和最后一个元素。
你最小的价值与小序号? – 2011-09-05 20:49:14
你如何定义“最小”?你的枚举是否使用比较器? –
@soc,当你说最小/最高时,你认为什么样的顺序? 1)自然排序是常数被声明的顺序? 2)常量的字母顺序? – bpgergo