2015-03-25 19 views
13

Tôi có một enum tĩnh như thế này:biểu Java8 Lambda để lặp qua các giá trị enum và khởi tạo thành viên chính thức

private static enum standardAttributes { 
    id, gender, firstname, lastname, mail, mobile 
} 

tôi cần tất cả các giá trị như String. Do đó, tôi có một phương pháp như sau:

public static List<String> getStandardRecipientsAttributes() { 
    List<String> standardAttributesList = new ArrayList<String>(); 
    for (standardAttributes s : standardAttributes.values()) 
     standardAttributesList.add(s.toString()); 

    return standardAttributesList; 
} 

Không cần phải tạo cùng Danh sách mọi phương pháp này được gọi. Vì vậy, tôi đã tạo một thành viên tĩnh:

static final List<String> standardAttributesList; 
static { 
    standardAttributesList = getStandardRecipientsAttributes(); 
} 

Điều này là tốt, nhưng tôi tự hỏi nếu có một biểu thức Lambda ưa thích để thay thế phương pháp. Một cái gì đó như thế này:

Arrays.asList(standardAttributes.values()).forEach((attribute) -> standardAttributesList.add(attribute.toString())); 

Hai câu hỏi:

  1. Tôi có thể tránh được những wrapper Arrays.asList?
  2. Làm cách nào để xử lý lỗi trình biên dịch: Chuẩn trường trống cuối cùngAttributesList có thể chưa được khởi tạo?
+0

Chỉ cần tự hỏi: nó sẽ không có ý nghĩa để có một chức năng thành viên trong enum của bạn mà thực hiện điều này cho bạn? Nếu lý do duy nhất để có enum này là để thu thập một danh sách các giá trị enum tiềm năng và xây dựng một chuỗi đại diện của điều đó - tại sao bạn bên ngoài phần thứ hai? – GhostCat

+0

Điểm tốt. Tôi đoán tôi đổ lỗi cho mã di sản cũ và ý chí còn thiếu cho những thứ tái cấu trúc :) –

Trả lời

23

Bạn có thể làm

static final List<String> standardAttributesList = 
              Stream.of(values()) 
               .map(Enum::name) 
               .collect(Collectors.toList()); 

này sẽ tạo ra một Stream từ một mảng các giá trị, áp dụng phương pháp .name() cho mỗi người và cuối cùng là thu thập tất cả các kết quả vào một danh sách.

+2

Hoàn hảo! Tôi chỉ muốn thêm rằng phương thức toList() là từ lớp Collectors. –

+0

Một bài viết hay hiển thị các cách để lặp qua các giá trị Enum trong Java: http://www.baeldung.com/java-enum-iteration – OutOfMind

Các vấn đề liên quan