Java의 모든 열거 형 값으로 목록 채우기


80

내가 열거의 모든 가능한 값 목록을 채우기 위해 싶습니다
나는 최근 사랑에 빠진 이후로 EnumSet나는 활용,allOf()

EnumSet<Something> all = EnumSet.allOf( Something.class);
List<Something> list = new ArrayList<>( all.size());
for (Something s : all) {
    list.add( s);
}
return list;

동일한 결과를 얻는 더 좋은 방법이 있습니까 (난독 화되지 않은 하나의 라이너에서와 같이)?


ArrayList <Something> list = new ArrayList <Something> (Arrays.asList (Something.values ​​()))
TacB0sS

답변:


169

EnumSet이 더 적절하기 때문에 처음에는 List를 사용하지 않지만 할 수 있습니다.

List<Something> somethingList = Arrays.asList(Something.values());

또는

List<Something> somethingList =
                 new ArrayList<Something>(EnumSet.allOf(Something.class));

3
때때로 EnumSet은 그것을 자르지 않습니다. 특히 주문이 중요한 경우
MonoThreaded 2013

1
@MonoThreaded 어떤 순서를 염두에 두셨습니까? EnumSet은 enum의 자연스러운 순서입니다. 목록은 세트와 동일한 순서이므로 목록을 사용해도 여기에서 아무것도 변경되지 않습니다.
Peter Lawrey 2013

1
죄송합니다. 주문은이 질문의 범위를 벗어납니다. 첫 번째 예에서 values ​​()를 의미한다고 생각합니다.
MonoThreaded 2013

@PeterLawrey 우리는 항상 Enums를 사용합니다. 우리는 승인 절차가 이동하지 않을 수 있습니다 워크 플로우를 디자인 할 때 Natural Order열거 형의를 A는 이유입니다 List<Enum>대 편리하다 EnumSet.
buzzsawddog

EnumSet이없는 get()동안 방법 (쉬운 랜덤 액세스) List수행합니다. 이것은 List / EnumSet이 어떤 용도로 사용 되든 중요 할 수 있습니다.
pallgeuer


10

생성자 ArrayList가 있습니다.

ArrayList(Collection<? extends E> c) 

이제 EnumSet확장 AbstractCollection하여 할 수 있습니다.

ArrayList<Something> all = new ArrayList<Something>(enumSet)

8

시험

enum E {
    E1, E2, E3
}

public static void main(String[] args) throws Exception {
    List<E> list = Arrays.asList(E.values());
    System.out.println(list);
}

추악한 레이아웃이지만 좋은 접근 방식 :)
MonoThreaded

질문에 명시된대로 java.util.ArrayList를 얻지 못한다는 점을 명확히 할 가치가 있습니다.
planetjones

@MonoThreaded 어떻게 못 생겼습니까? 당신은 당신이 묻는 것을 얻을
CA Arefe

1
List<Something> result = new ArrayList<Something>(all);

EnumSetSet인터페이스를 구현하므로 Java 컬렉션입니다 .

public interface Set<E> extends Collection<E> 

따라서 컬렉션으로 할 수있는 모든 작업은 EnumSet.


0

이것은 좀 더 읽기 쉽습니다.

Object[] allValues = all.getDeclaringClass().getEnumConstants();

1
그럼 당신은 단순히 Something.class.getEnumConstants()옳게 할 수 있습니까?
shyam

1
... 또는Something.values();
Peter Lawrey 2013-04-22

0

이 시도:

... = new ArrayList<Something>(EnumSet.allOf(Something.class));

ArrayList와 생성자가 있습니다 Collection<? extends E>. 그러나이 방법은 정말로 EnumSet.

모든 열거 형은 메서드에 액세스 할 수 있습니다 values(). 모든 열거 형 값의 배열을 반환합니다.

... = Arrays.asList(Something.values());


-2
private ComboBox gender;
private enum Selgender{Male,Famle};
ObservableList<Object> observableList  =FXCollections.observableArrayList(Selgender.values());
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.