दिलचस्प पोस्ट
ResultSet के साथ java.util.stream यह रीजेक्स कैरेट की अनुमति क्यों दे रहा है? jQuery – इसके टेक्स्ट विवरण के माध्यम से एक चयनित नियंत्रण का चयनित मान सेट करना कैसे जावा के साथ एक आरएसएस फ़ीड लिखने के लिए? एंड्रॉइड वेबदृश्य में, क्या मैं एक वेबपेज के डोम को संशोधित करने में सक्षम हूं? ओलेडीबी और मिश्रित एक्सेल आंकड़े: गायब डेटा एसएएसएस का इस्तेमाल करते हुए नेस्टेड कक्षाओं को शामिल करना बड़ी संख्या में पंक्तियों के साथ JTable जनसंख्या वेब सेवा प्रतिक्रिया के लिए टेक्स्ट / एक्सएमएल बनाम एप्लिकेशन / एक्सएमएल के बीच अंतर क्या है पता लगाएँ कि पीडीएफ फाइल सही है (हैडर पीडीएफ) मैं एंड्रॉइड पर एसडी कार्ड में डेटाबेस फ़ाइल कैसे बैकअप करूं? एक GROUP_CONCAT पर MySQL अलग () एसक्यूएल सर्वर 2008 प्रबंधन स्टूडियो मेरी क्वेरी के सिंटैक्स की जाँच नहीं कर रहा है जावास्क्रिप्ट में एक सरणी को उल्टा करने का सबसे कारगर तरीका क्या है? 3.0 के लिए प्रोजेक्ट पहल डायनैमिक वेब मॉड्यूल का संस्करण नहीं बदल सकता है?

जावा स्ट्रिंग मान से मैं कैसे तलाश सकता हूं?

मैं अपने स्ट्रिंग मान (या संभवतः किसी भी अन्य मान) से एक एन्यूएम को देखना चाहता हूं। मैंने निम्नलिखित कोड की कोशिश की है लेकिन यह प्रारंभिक रूप से स्थिर करने की अनुमति नहीं देता है क्या कोई आसान तरीका है?

public enum Verbosity { BRIEF, NORMAL, FULL; private static Map<String, Verbosity> stringMap = new HashMap<String, Verbosity>(); private Verbosity() { stringMap.put(this.toString(), this); } public static Verbosity getVerbosity(String key) { return stringMap.get(key); } }; 

वेब के समाधान से एकत्रित समाधान "जावा स्ट्रिंग मान से मैं कैसे तलाश सकता हूं?"

मूल्य का उपयोग करें विधि जो स्वचालित रूप से प्रत्येक Enum के लिए बनाई गई है।

 Verbosity.valueOf("BRIEF") == Verbosity.BRIEF 

मनमाने मूल्यों के साथ शुरू होता है:

 public static Verbosity findByAbbr(String abbr){ for(Verbosity v : values()){ if( v.abbr().equals(abbr)){ return v; } } return null; } 

केवल बाद में लागू करने के लिए नक्शा का कार्यान्वयन यदि आपके प्रोफाइलर आपको कहता है

मुझे पता है कि यह सभी मूल्यों पर चल रहा है, लेकिन केवल 3 एन्यूम मूल्यों के साथ यह किसी भी अन्य प्रयास के लायक ही नहीं है, वास्तव में जब तक आपके पास बहुत सारे मूल्य नहीं हैं, मैं एक मानचित्र के साथ परेशान नहीं होता, यह तेजी से पर्याप्त होगा

आप करीब हैं मनमाना मूल्यों के लिए, निम्न की तरह कुछ प्रयास करें:

 public enum Day { MONDAY("M"), TUESDAY("T"), WEDNESDAY("W"), THURSDAY("R"), FRIDAY("F"), SATURDAY("Sa"), SUNDAY("Su"), ; private final String abbreviation; // Reverse-lookup map for getting a day from an abbreviation private static final Map<String, Day> lookup = new HashMap<String, Day>(); static { for (Day d : Day.values()) { lookup.put(d.getAbbreviation(), d); } } private Day(String abbreviation) { this.abbreviation = abbreviation; } public String getAbbreviation() { return abbreviation; } public static Day get(String abbreviation) { return lookup.get(abbreviation); } } 

@ लिले का जवाब खतरनाक है और मैंने देखा है कि यह विशेष रूप से काम नहीं करता है, यदि आप एक स्थिर आंतरिक कक्षा बनाते हैं। इसके बजाय मैंने ऐसा कुछ इस्तेमाल किया है जो एटम से पहले BootstrapSingleton नक्शे लोड करेगा।

इसे संपादित करना आधुनिक जेवीएम (जेवीएम 1.6 या अधिक) के साथ कोई समस्या नहीं होनी चाहिए, लेकिन मुझे लगता है कि जेआरबेल के साथ अभी भी समस्याएं हैं, लेकिन मुझे इसे वापस लेने का मौका नहीं मिला है

मुझे पहले लोड करें:

  public final class BootstrapSingleton { // Reverse-lookup map for getting a day from an abbreviation public static final Map<String, Day> lookup = new HashMap<String, Day>(); } 

अब इनम कंस्ट्रक्टर में इसे लोड करें:

  public enum Day { MONDAY("M"), TUESDAY("T"), WEDNESDAY("W"), THURSDAY("R"), FRIDAY("F"), SATURDAY("Sa"), SUNDAY("Su"), ; private final String abbreviation; private Day(String abbreviation) { this.abbreviation = abbreviation; BootstrapSingleton.lookup.put(abbreviation, this); } public String getAbbreviation() { return abbreviation; } public static Day get(String abbreviation) { return lookup.get(abbreviation); } } 

यदि आपके पास एक आंतरिक इनाम है तो आप केवल enum परिभाषा के ऊपर मानचित्र को परिभाषित कर सकते हैं और वह (सिद्धांत में) पहले लोड हो जाना चाहिए।

और आप valueOf () का उपयोग नहीं कर सकते हैं?

संपादित करें: बीटीडब्ल्यू, वहाँ कुछ भी एक enum में स्थिर {} का उपयोग करने से रोक नहीं है

जावा 8 के साथ आप इस तरह से प्राप्त कर सकते हैं:

 public static Verbosity findByAbbr(final String abbr){ return Arrays.stream(values()).filter(value -> value.abbr().equals(abbr)).findFirst().orElse(null); } 

जावा भाषा विशिष्टता 7 में एक उदाहरण है ! जो स्व-संदर्भों के साथ मानचित्र के प्रारंभिक रूप से आपके प्रश्न को दर्शाता है।

शायद, इस पर एक नज़र डालें। यह मेरे लिए काम कर रहा है इसका उद्देश्य 'लाल' के साथ '/ red_color' देखने का है एक static map घोषित करना और enum s को लोड करने में केवल एक बार कुछ प्रदर्शन लाभ मिलेगा यदि enum s कई हैं

 public class Mapper { public enum Maps { COLOR_RED("/red_color", "RED"); private final String code; private final String description; private static Map<String, String> mMap; private Maps(String code, String description) { this.code = code; this.description = description; } public String getCode() { return name(); } public String getDescription() { return description; } public String getName() { return name(); } public static String getColorName(String uri) { if (mMap == null) { initializeMapping(); } if (mMap.containsKey(uri)) { return mMap.get(uri); } return null; } private static void initializeMapping() { mMap = new HashMap<String, String>(); for (Maps s : Maps.values()) { mMap.put(s.code, s.description); } } } } 

कृपया अपने मतों को दें।

आप निम्न कोड के रूप में अपने Enum को परिभाषित कर सकते हैं:

 public enum Verbosity { BRIEF, NORMAL, FULL, ACTION_NOT_VALID; private int value; public int getValue() { return this.value; } public static final Verbosity getVerbosityByValue(int value) { for(Verbosity verbosity : Verbosity.values()) { if(verbosity.getValue() == value) return verbosity ; } return ACTION_NOT_VALID; } @Override public String toString() { return ((Integer)this.getValue()).toString(); } }; 

अधिक स्पष्टीकरण के लिए निम्नलिखित लिंक देखें

अगर यह अन्य लोगों की मदद करता है, तो मैं जो विकल्प पसंद करता हूं, जो यहां सूचीबद्ध नहीं है, वह गवाओं की नक्शा कार्यक्षमता का उपयोग करता है :

 public enum Vebosity { BRIEF("BRIEF"), NORMAL("NORMAL"), FULL("FULL"); private String value; private Verbosity(final String value) { this.value = value; } public String getValue() { return this.value; } private static ImmutableMap<String, Verbosity> reverseLookup = Maps.uniqueIndex(Arrays.asList(Verbosity.values)), Verbosity::getValue); public static Verbosity fromString(final String id) { return reverseLookup.getOrDefault(id, NORMAL); } } 

डिफ़ॉल्ट के साथ आप null उपयोग कर सकते हैं, आप fromInt throw IllegalArgumentException सकते हैं fromInt या आपके से fromInt Optional वापस कर सकते हैं, जो भी आप चाहते हैं

आप ऊपर गरेथ डेविस और ब्रैड ग्रेस द्वारा सुझाए गए अनुसार Enum::valueOf() फ़ंक्शन का उपयोग कर सकते हैं, लेकिन यह सुनिश्चित कर लें कि आप IllegalArgumentException संभाल लेंगे यदि उपयोग किए गए स्ट्रिंग एन्यूम में मौजूद नहीं है।