내가 열거의 모든 가능한 값 목록을 채우기 위해 싶습니다
나는 최근 사랑에 빠진 이후로 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;
동일한 결과를 얻는 더 좋은 방법이 있습니까 (난독 화되지 않은 하나의 라이너에서와 같이)?
답변
EnumSet이 더 적절하기 때문에 처음에는 List를 사용하지 않지만 할 수 있습니다.
List<Something> somethingList = Arrays.asList(Something.values());
또는
List<Something> somethingList =
new ArrayList<Something>(EnumSet.allOf(Something.class));
답변
List<SOME_ENUM> enumList = Arrays.asList(SOME_ENUM.class.getEnumConstants());
답변
생성자 ArrayList
가 있습니다.
ArrayList(Collection<? extends E> c)
이제 EnumSet
확장 AbstractCollection
하여 할 수 있습니다.
ArrayList<Something> all = new ArrayList<Something>(enumSet)
답변
시험
enum E {
E1, E2, E3
}
public static void main(String[] args) throws Exception {
List<E> list = Arrays.asList(E.values());
System.out.println(list);
}
답변
List<Something> result = new ArrayList<Something>(all);
EnumSet
Set
인터페이스를 구현하므로 Java 컬렉션입니다 .
public interface Set<E> extends Collection<E>
따라서 컬렉션으로 할 수있는 모든 작업은 EnumSet
.
답변
이것은 좀 더 읽기 쉽습니다.
Object[] allValues = all.getDeclaringClass().getEnumConstants();
답변
이 시도:
... = new ArrayList<Something>(EnumSet.allOf(Something.class));
로 ArrayList
와 생성자가 있습니다 Collection<? extends E>
. 그러나이 방법은 정말로 EnumSet
.
모든 열거 형은 메서드에 액세스 할 수 있습니다 values()
. 모든 열거 형 값의 배열을 반환합니다.
... = Arrays.asList(Something.values());