2011-09-05 4 views
4

enum 유형으로 구성된 모음을 고려하십시오. 어떤 라이브러리 메소드 min (또는 max)이이 콜렉션 (또는 varargs)을 받아들이고 가장 작은/가장 높은 값을 리턴합니까?자바 표준 라이브러리에서 열거 형 집합 중 가장 작은 열거 형을 가져 오는 방법이 있습니까?

EDIT : Comparablecompare 구현으로 정의 된 열거 형의 자연 순서를 의미합니다.

+4

작은 서수로 최소값을 계산합니까? –

+0

"가장 작은"것을 어떻게 정의합니까? 귀하의 enum은 Comparator를 사용합니까? –

+0

@soc, 가장 작은/가장 높은 것을 말할 때 어떤 종류의 주문을 생각하십니까? 1) 자연 순서 부는 상수가 선언 된 순서입니까? 2) 상수의 알파벳 순서? – bpgergo

답변

6

열거 형으로 당신이 선언 된 순서를 유지하려면, 어떤 수집

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

에서 사용자 정의 비교를 사용 넣어하려는 경우 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

사용자 정의 순서 (알파벳 말은), SortedSet의

SortedSet<MyEnumType> set = new TreeSet<MyEnumType>(); 
set.add(enum1); 
2

Set<MyEnum>이있는 경우 이미 EnumSet이어야합니다. 안타깝게도이 클래스는 firstlast 메서드를 제공하지 않지만 증가 순서로 반복되도록 보장하므로 예를 들어 thatSet.toArray()의 첫 번째 요소와 마지막 요소를 안정적으로 사용할 수 있습니다.

관련 문제