2013-04-22 6 views
55

मैं एक enum
जब से मैं हाल ही में EnumSet से प्यार हो गया के सभी संभव मूल्यों के साथ एक सूची को भरने के लिए चाहते हैं, मैं का लाभ उठाया allOf()
जावा सभी enum साथ भरने सूची को महत्व देता

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

वहाँ एक है एक ही परिणाम प्राप्त करने के लिए बेहतर तरीका (जैसा कि गैर obfuscated एक लाइनर में)?

+0

ArrayList सूची = नए ArrayList (Arrays.asList (Something.values())) – TacB0sS

उत्तर

115

कर सकते हैं मैं पहली जगह में एक सूची का उपयोग नहीं करता एक EnumSet के रूप में अधिक approriate है, लेकिन के रूप में यह Set इंटरफ़ेस लागू करता है आप कर सकते हैं

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

या

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

कभी-कभी EnumSet इसे काट नहीं देता है। विशेष रूप से जब आदेश – MonoThreaded

+1

@MonoTreaded आपके मन में क्या आदेश था? एक EnumSet एक enum के लिए प्राकृतिक क्रम में है। सूची सेट के समान क्रम में होगी, इसलिए सूची का उपयोग करके यहां कुछ भी नहीं बदला जाता है। –

+1

क्षमा करें, आदेश इस प्रश्न के दायरे से बाहर है। मेरा मानना ​​है कि आपके पहले उदाहरण में मूल्य() का मतलब था। – MonoThreaded

0

यह थोड़ा अधिक पठनीय है:

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

तो आप बस 'Something.class.getEnumConstants()' सही कर सकते हैं? – shyam

+1

... या 'कुछ .values ​​(); ' –

+0

अच्छे अंक। मेरा जावा स्पष्ट रूप से जंगली है! – BlackVegetable

9

ArrayList के लिए एक निर्माता जो

ArrayList(Collection<? extends E> c) 

अब है नहीं है, EnumSet फैली AbstractCollection ताकि आप केवल

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

EnumSet एक जावा संग्रह है,:

public interface Set<E> extends Collection<E> 

तो आप संग्रह के साथ कुछ भी कर सकते हैं जो आप EnumSet के साथ कर सकते हैं।

6

कोशिश

enum E { 
    E1, E2, E3 
} 

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

बदसूरत लेआउट लेकिन अच्छा दृष्टिकोण :) – MonoThreaded

+0

यह स्पष्ट करने के लायक है कि आपको java.util.Array नहीं मिला है, जैसा कि प्रश्न में बताया गया है – planetjones

0

इस प्रयास करें:

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

ArrayList रूप Collection<? extends E> के साथ एक निर्माता है। लेकिन अगर आप वास्तव में EnumSet का उपयोग करना चाहते हैं तो इस विधि का उपयोग करें।

सभी enums के पास values() विधि तक पहुंच है। यह सब enum मूल्यों की एक सरणी देता है:

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

तुम भी उपयोग कर सकते हैं:

Collections.singletonList(Something.values()) 
संबंधित मुद्दे