我有一個靜態的枚舉這樣的:Java8 Lambda表達式來遍歷枚舉值和初始化最後成員
private static enum standardAttributes {
id, gender, firstname, lastname, mail, mobile
}
我需要的所有值作爲字符串。因此,我有這樣的方法:
public static List<String> getStandardRecipientsAttributes() {
List<String> standardAttributesList = new ArrayList<String>();
for (standardAttributes s : standardAttributes.values())
standardAttributesList.add(s.toString());
return standardAttributesList;
}
每次調用此方法都不需要創建相同的List。所以我創建了一個靜態成員:
static final List<String> standardAttributesList;
static {
standardAttributesList = getStandardRecipientsAttributes();
}
這很好,但我不知道是否有一個花哨的Lambda表達式來替換該方法。事情是這樣的:
Arrays.asList(standardAttributes.values()).forEach((attribute) -> standardAttributesList.add(attribute.toString()));
兩個問題:
- 我能避免Arrays.asList包裝?
- 如何處理編譯器錯誤:空白最終字段standardAttributesList可能尚未初始化?
只是想知道:在你的枚舉中有一個成員函數是否有意義爲你做到這一點?如果擁有這個枚舉的唯一原因是收集一個可能的枚舉值列表併爲其建立一個字符串表示 - 爲什麼要將第二部分外化? – GhostCat 2015-03-25 09:40:45
好點。我想我把責任歸咎於舊的遺留代碼和遺漏的重構東西:) – 2015-03-25 09:58:17