Chuyển đổi liệt kê thành một bộ / danh sách


171

Có một số phương thức cầu nối một lớp để kết hợp một phép liệt kê cụ thể vào java.util.List hoặc java.util.Set không?

Một cái gì đó được tích hợp sẵn Arrays.asList()hoặc Collection.toArray()nên tồn tại ở đâu đó, nhưng tôi không thể tìm thấy trong cửa sổ đánh giá trình gỡ lỗi IntelliJ của mình (và cả kết quả Google / SO nữa).

Câu trả lời:


320

Bạn có thể sử dụng Collections.list()để chuyển đổi một Enumerationthành một Listtrong một dòng:

List<T> list = Collections.list(enumeration);

Không có phương pháp tương tự để có được một Set, tuy nhiên bạn vẫn có thể thực hiện một dòng:

Set<T> set = new HashSet<T>(Collections.list(enumeration));

Bằng cách nào đó tôi đã bỏ lỡ phương pháp này trong khi ẩn trong phần thả xuống tự động hoàn thành. Cảm ơn!
Anton K


5

Khi sử dụng ổi (Xem doc ) thì có Iterators.forEnumeration. Đưa ra một Enumeration xbạn có thể làm như sau:

để có được một bộ bất biến:

ImmutableSet.copyOf(Iterators.forEnumeration(x));

để có được một danh sách bất di bất dịch:

ImmutableList.copyOf(Iterators.forEnumeration(x));

để có được một bộ băm:

Sets.newHashSet(Iterators.forEnumeration(x));

5

Có một ví dụ đơn giản về chuyển đổi liệt kê sang danh sách. Đối với điều này tôi đã sử dụng Collections.list(enum)phương pháp.

public class EnumerationToList {

    public static void main(String[] args) {
        Vector<String> vt = new Vector<String>();
        vt.add("java");
        vt.add("php");
        vt.add("array");
        vt.add("string");
        vt.add("c");

        Enumeration<String> enm = vt.elements();
        List<String> ll = Collections.list(enm);
        System.out.println("List elements: " + ll);
    }

}

Tham khảo: Cách chuyển đổi liệt kê sang danh sách


3

Nếu bạn cần Setchứ không phải List, bạn có thể sử dụng EnumSet.allOf () .

Set<EnumerationClass> set = EnumSet.allOf(EnumerationClass.class);

Cập nhật : JakeRobb đã đúng. Câu trả lời của tôi là về java.lang.Enum thay vì java.util.Enumutions. Xin lỗi vì câu trả lời không liên quan.


2
Tôi khá chắc chắn rằng người hỏi đã hỏi về java.util.Enumutions, anh em họ kế thừa của Iterator, không phải java.lang.Enum, thứ bạn nhận được khi bạn sử dụng từ khóa 'enum'.
JakeRobb

Tôi đã thực hiện một tìm kiếm google cho "java convert enum thành một bộ" và chủ đề này đã trở lại như là phản hồi đầu tiên. @Timur được upvote của tôi.
ShellDude

-2

Tôi cần điều tương tự và giải pháp này hoạt động tốt, hy vọng nó cũng có thể giúp được ai đó

Enumeration[] array = Enumeration.values();
List<Enumeration> list = Arrays.asList(array);

sau đó bạn có thể lấy .name () của bảng liệt kê.


5
Câu trả lời của bạn cho thấy làm thế nào để chuyển đổi một mảng thành một danh sách và điều đó chỉ xảy ra khi bạn có một mảng liệt kê. Câu hỏi là về liệt kê-> Chuyển đổi danh sách.
kryger
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.