2012-10-04 11 views
101

में शून्य और खाली संग्रह को सत्यापित करने के लिए सर्वोत्तम अभ्यास मैं यह सत्यापित करना चाहता हूं कि संग्रह खाली है या null। क्या कोई मुझे सबसे अच्छा अभ्यास बता सकता है।जावा

वर्तमान में, मैं नीचे के रूप में जाँच कर रहा हूँ:

if (null == sampleMap || sampleMap.isEmpty()) { 
    // do something 
} 
else { 
    // do something else 
} 
+6

किसी और चीज के अलावा, * नमूना मैप == नल' के बजाय * क्यों * आप 'null == sampleMap' का उपयोग करें। अधिकांश लोगों को बाद में अधिक पठनीय लगता है - पूर्व अन्य भाषाओं से एक धारक है। –

+1

यदि आप रुचि रखते हैं, तो [कुछ और तर्क] है (http://pushinginertia.com/2011/05/why-yoda-conditions-are-bad-and-usage-of-javas-final-keyword-is- अच्छा /) @JonSkeet ने – eis

+0

का उल्लेख किया, वैसे, शून्य संग्रह खराब है। यदि संभव हो, तो इसे खाली संग्रह बनाएं। 'प्रभावी जावा देखें: आइटम 43 - खाली सरणी या संग्रह लौटें, नल। –

उत्तर

150

आप अपने प्रोजेक्ट में Apache Commons Collections पुस्तकालय का उपयोग करते हैं, तो आप CollectionUtils.isEmpty और MapUtils.isEmpty() तरीकों जो क्रमशः जाँच का उपयोग कर सकते है अगर एक संग्रह या एक नक्शा खाली या अशक्त है (यानी वे "null- सुरक्षित ")।

इन तरीकों के पीछे कोड उपयोगकर्ता के नाम पर लिखा गया है जो कम से कम है।

चाहे आप जो भी करते हैं, याद रखें कि आपके द्वारा लिखे गए कम कोड, आपके कोड की जटिलता कम होने के कारण आपको कम कोड की आवश्यकता होती है।

+0

धन्यवाद MapUtils.isEmpty नक्शा देखने के लिए सही समाधान है शून्य या खाली है –

46

यह जाँच करने के लिए सबसे अच्छा तरीका है कि। निजी तौर पर

public static boolean isNullOrEmpty(final Collection<?> c) { 
    return c == null || c.isEmpty(); 
} 

public static boolean isNullOrEmpty(final Map< ?, ? > m) { 
    return m == null || m.isEmpty(); 
} 
+0

' मानचित्र 'के लिए भी एक समान कार्य होना चाहिए। –

+1

निश्चित रूप से, आप नक्शे के लिए भी एक जोड़ सकते हैं, लेकिन शीर्षक ने संग्रह कहा है। – icza

+1

मुझे समझ में नहीं आता कि क्या एम शून्य है .isEmpty() NullPointerException rigth का कारण बन जाएगा? अन्यथा, यदि बाएं तरफ (एम == नल) सत्य है तो बाकी की जांच नहीं की जाएगी – ismail

10

, मैं null के बजाय खाली संग्रह का उपयोग और एल्गोरिदम एक तरह से काम करते हैं कि एल्गोरिथ्म के लिए यह कोई बात नहीं है करने के लिए पसंद करते हैं संग्रह खाली है या: आप यह करने के लिए एक सहायक विधि लिख सकता है नहीं।

2

यदि आपको शून्य की जांच करने की आवश्यकता है, तो यही तरीका है। हालांकि, अगर आप इस पर नियंत्रण रखते हैं, तो जब भी आप कर सकते हैं, खाली संग्रह वापस कर दें, और बाद में केवल खाली के लिए जांचें।

This thread सी # के साथ एक ही चीज़ के बारे में है, लेकिन सिद्धांत जावा के लिए समान रूप से अच्छी तरह से लागू होते हैं। जैसा वहाँ उल्लेख किया है, अशक्त केवल तभी

  • अशक्त कुछ अधिक विशिष्ट मतलब हो सकता है वापस आ जाना चाहिए,
  • आपका एपीआई (अनुबंध) आपको शून्य वापस करने के लिए मजबूर कर सकता है।
9

आप स्प्रिंग चौखटे का उपयोग करते हैं, तो आप CollectionUtils दोनों संग्रह (सूची, सरणी) के खिलाफ जांच करने के लिए उपयोग कर सकते हैं और मानचित्र आदि

if(CollectionUtils.isEmpty(...)) {...} 
4

आप वसंत का उपयोग करते हैं तो आप उपयोग कर सकते हैं

boolean isNullOrEmpty = org.springframework.util.ObjectUtils.isEmpty(obj); 

जहां obj किसी भी है [नक्शा, संग्रह, सरणी, aythink ...]

अन्यथा: कोड है:

public static boolean isEmpty(Object[] array) { 
    return (array == null || array.length == 0); 
} 

public static boolean isEmpty(Object obj) { 
    if (obj == null) { 
     return true; 
    } 

    if (obj.getClass().isArray()) { 
     return Array.getLength(obj) == 0; 
    } 
    if (obj instanceof CharSequence) { 
     return ((CharSequence) obj).length() == 0; 
    } 
    if (obj instanceof Collection) { 
     return ((Collection) obj).isEmpty(); 
    } 
    if (obj instanceof Map) { 
     return ((Map) obj).isEmpty(); 
    } 

    // else 
    return false; 
} 

स्ट्रिंग के लिए सबसे अच्छा है:

boolean isNullOrEmpty = (str==null || str.trim().isEmpty()); 
0

आप org.apache.commons.lang.Validate के "notEmpty" विधि का उपयोग कर सकते हैं:

Validate.notEmpty(myCollection) -> मान्य कि निर्दिष्ट तर्क संग्रह न अशक्त और न ही शून्य के आकार का होता है (कोई तत्व नहीं); अन्यथा अपवाद फेंकना।

0

सभी संग्रहों के लिए नक्शा उपयोग शामिल है: यह संग्रह विधि है जो इन संग्रह वस्तुओं पर है। लेकिन आपको

मानचित्र मानचित्र से पहले एक नल्कल चेक करना होगा;

........ अगर (नक्शा = अशक्त & & map.isEmpty()!) ......

1

आप स्प्रिंग ढांचे का उपयोग कर रहे हैं, तो आप उपयोग कर सकते हैं:

CollectionUtils.isEmpty(Collection collection); 

यदि आपूर्ति संग्रह खाली या खाली है तो यह विधि सही हो जाती है।