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

发布于 2024-12-03 02:23:42 字数 170 浏览 1 评论 0原文

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

编辑:我的意思是枚举的自然顺序,由其 Comparablecompare 实现定义。

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

缱绻入梦 2024-12-10 02:23:42

枚举实现 Comparable(其中 E 是 Enum),它们的自然顺序是声明枚举常量的顺序。
您可以使用它们的默认 Comparable 实现来获取声明的 max 和 min 常量:

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;

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

Enums implement Comparable<E> (where E 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:

public enum BigCountries {
    USA(312), INDIA(1210), CHINA(1330), BRAZIL (190);

    private int population;

    private BigCountries(int population) {
        this.population = population;
    }

}

Then you can use:

BigCountries first = Collections.min(Arrays.asList(BigCountries.values())); // USA
BigCountries last = Collections.max(Arrays.asList(BigCountries.values()));  //BRAZIL

Probably, a faster way would be to use direct access to the array returned by the values() method:

BigCountries[] values = BigCountries.values();
System.out.println(values[0]); // USA;
System.out.println(values[values.length-1]); // BRAZIL;

Note that the parameter given to the enum has no effect in the ordering.

奈何桥上唱咆哮 2024-12-10 02:23:42

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

If you have some Set<MyEnum>, it should already be of type EnumSet. Sadly, this class does not provide first and last methods, but it does guarantee to iterate in increasing order, so you can reliably use, for example, the first and last elements in thatSet.toArray().

℡Ms空城旧梦 2024-12-10 02:23:42

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

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

If you want custom ordering (say alphabetical), use a custom comparator on any collection

class MyComparator implements Comparator<MyEnumType>
{
    public int compare(MyEnumType enum1, MyEnumType enum2)
    {
        return o1.toString().compareTo(o1.toString());
    }
}

If you want to keep the declared order, put them into a SortedSet

SortedSet<MyEnumType> set = new TreeSet<MyEnumType>();
set.add(enum1);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文