Java标准库中是否有一些方法可以从一组枚举中获取最小的枚举?

时间:2011-09-05 20:47:21

标签: java collections enums compare max

考虑一个由枚举类型组成的集合。是否有一些库方法min(或max)接受此集合(或varargs)并返回最小/最高值?

编辑:我的意思是枚举的自然顺序,由compare Comparable的{​​{1}}实现定义。

3 个答案:

答案 0 :(得分:6)

枚举实现Comparable<E>(其中E is 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;

请注意,给予枚举的参数对顺序没有影响。

答案 1 :(得分:2)

如果您有一些Set<MyEnum>,则它应该已经是EnumSet类型。遗憾的是,这个类不提供firstlast方法,但它确保按递增顺序迭代,因此您可以可靠地使用,例如thatSet.toArray()中的第一个和最后一个元素

答案 2 :(得分:1)

如果您想要自定义排序(比如按字母顺序排列),请在任何集合上使用自定义比较器

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);