考慮一個由枚舉類型組成的集合。是否有一些圖書館方法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