जावा में सभी enum मानों के साथ एक सूची भरना


80

मैं एक enum के सभी संभावित मूल्यों के साथ एक सूची भरना चाहूंगा
क्योंकि मैंने हाल ही में प्यार किया 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;

क्या एक ही परिणाम प्राप्त करने के लिए एक बेहतर तरीका है (जैसा कि नॉन ओब्सेस्ड एक लाइनर है)?


ArrayList <कुछ> सूची = नया ArrayList <कुछ> (Arrays.asList (Some.values ​​()))
TacB0sS

जवाबों:


169

मैं पहले स्थानों पर एक सूची का उपयोग नहीं करूंगा क्योंकि एक EnumSet अधिक स्पष्ट है लेकिन आप कर सकते हैं

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

या

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

3
कभी-कभी EnumSet इसे नहीं काटते हैं। विशेष रूप से जब ऑर्डर मायने रखता है
मोनोक्रेट्स

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

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

@PeterLawrey हम हर समय Enums का उपयोग करते हैं। जब हम वर्कफ़्लो डिज़ाइन करते हैं, तो अनुमोदन प्रक्रिया Natural OrderEnum में नहीं जा सकती है , यही कारण है कि List<Enum>काम में आता है बनाम ए EnumSet
buzzsawddog

EnumSetएक get()विधि (आसान यादृच्छिक अभिगम) नहीं है जबकि Listकरता है। यह जो कुछ के लिए सूची / EnumSet लिए इस्तेमाल किया जा करने का इरादा है महत्वपूर्ण हो सकता है
pallgeuer


10

ArrayListजिसके लिए एक कंस्ट्रक्टर है

ArrayList(Collection<? extends E> c) 

अब, EnumSetविस्तार करता है AbstractCollectionताकि आप बस कर सकें

ArrayList<Something> all = new ArrayList<Something>(enumSet)

8

प्रयत्न

enum E {
    E1, E2, E3
}

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

बदसूरत लेआउट लेकिन अच्छा तरीका :)
MonoThreaded

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

@MonoThreaded यह बदसूरत कैसे है? आपको वह मिलता है जो आपने मांगा था
CA Arefe

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

EnumSetएक जावा संग्रह है, क्योंकि यह Setइंटरफ़ेस को लागू करता है:

public interface Set<E> extends Collection<E> 

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



0

इसे इस्तेमाल करे:

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

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

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

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


-2
private ComboBox gender;
private enum Selgender{Male,Famle};
ObservableList<Object> observableList  =FXCollections.observableArrayList(Selgender.values());
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.