जावा में अशक्त और खाली संग्रह को मान्य करने के लिए सबसे अच्छा अभ्यास


209

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

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

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

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

6
वैसे, अशक्त संग्रह खराब है। यदि संभव हो, तो इसके बजाय इसे खाली संग्रह करें। See Effective Java: Item 43 - Return empty arrays or collections, not nulls.
卢 卢 शेंगयुआन लू

@JonSkeet लोग मामले में null == sampleMap का उपयोग करते हैं जो वे लिखते हैं = के बजाय ==। अगर आप नमूना मैप का उपयोग करते हैं == अशक्त, जब आप एक भूल जाते हैं =, तो यह नमूना मैप = अशक्त हो जाता है, जो इस प्रकार त्रुटि नहीं बढ़ाएगा, इसे दूसरे तरीके से लिखने से डेवलपर को इसे देखने में मदद मिलती है
उड़ी लोया

1
@UriLoya: यदि आप if (null = sampleMap)जावा में लिखते हैं तो आपको एक संकलन त्रुटि मिलेगी। यह ठीक मेरी पहली टिप्पणी की बात है। इसके लिए "कारण" भाषा-विशिष्ट है, लेकिन पठनीयता के दंड के बावजूद अन्य भाषाओं में प्रचारित किया गया है क्योंकि लोगों ने विचार नहीं किया है कि वे ऐसा क्यों कर रहे हैं।
जॉन स्कीट

आप CollectionUtils वर्ग का उपयोग कर सकते हैं जोकि org.apache.commons.collections4.CollectionUnils पैकेज में मौजूद है। खाली या अशक्त खोजने के लिए कई उपयोगिता विधियाँ हैं।
विकाश

जवाबों:


312

यदि आप अपनी परियोजना में अपाचे कॉमन्स कलेक्शंस लाइब्रेरी का उपयोग करते हैं, तो आप उन तरीकों CollectionUtils.isEmptyऔर MapUtils.isEmpty()विधियों का उपयोग कर सकते हैं जो क्रमशः जांचते हैं कि संग्रह या नक्शा खाली है या रिक्त है (अर्थात वे "अशक्त" हैं)।

इन विधियों के पीछे का कोड कमोबेश उपयोगकर्ता @icza ने अपने उत्तर में लिखा है।

आप जो भी करते हैं, उसके बावजूद याद रखें कि जितना कम कोड आप लिखते हैं, उतना कम कोड आपको अपने कोड की जटिलता के रूप में परीक्षण करने की आवश्यकता होती है।


1
धन्यवाद MapUtils.isEmpty मानचित्र की जांच करने के लिए एकदम सही समाधान है अशक्त या खाली
नारायण येराबाचु

23
यह अफ़सोस की बात है कि उनका नाम नहीं है isNullOrEmpty
जूल

72

यह जांचने का सबसे अच्छा तरीका है। आप इसे करने के लिए एक सहायक विधि लिख सकते हैं:

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

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

Map<?>साथ ही एक समान फ़ंक्शन होना चाहिए ।
लुइगी मेंडोज़ा

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

1
मुझे समझ में नहीं आ रहा है कि यदि मी null है तो .isEmpty () NullPointerException रिग का कारण होगा? अन्यथा, यदि बाईं ओर (m == null) सत्य है, तो शेष की जाँच नहीं की जाएगी
इस्माइल साहिन

4
@ismail ||ऑपरेटर एक शॉर्ट-सर्किट ऑपरेटर है, जिसका अर्थ है कि यदि बाएं ऑपरेंड है true, तो यह सही ऑपरेंड का मूल्यांकन नहीं करेगा। तो अगर m == null, तो m.isEmpty()नहीं बुलाया जाएगा (जरूरत नहीं है, परिणाम है true)।
icza

निर्दोष समाधान @icza
गौरव

32

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

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

हो सकता है, आप मानचित्र के लिए MapUtils.isEmpty () के बारे में बात करें, लेकिन सभी संग्रह के लिए नहीं?
पावलो चेचोव

21

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


10

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

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

जहाँ obj कोई भी हो [मानचित्र, संग्रह, सरणी, aything ...]

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

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());

3

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

यह धागा C # के साथ एक ही चीज के बारे में है, लेकिन सिद्धांत जावा पर समान रूप से लागू होते हैं। जैसा कि वहां बताया गया है, नल को केवल तभी लौटाया जाना चाहिए

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

3

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

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


1

हम जाँचेंगे कि एक संग्रह वस्तु खाली है, रिक्त है या नहीं। नीचे दिए गए ये सभी तरीके org.apache.commons.collections4.CollectionUtils पैकेज में मौजूद हैं।

संग्रह ऑब्जेक्ट्स की सूची या सेट प्रकार पर जाँच करें।

CollectionUtils.isEmpty(listObject);
CollectionUtils.isNotEmpty(listObject);

वस्तुओं के मानचित्र प्रकार पर जाँच करें।

MapUtils.isEmpty(mapObject);
MapUtils.isNotEmpty(mapObject);

सभी तरीकों की वापसी प्रकार बूलियन है।


-1

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

Map<String, String> map;

........
if(map!=null && !map.isEmpty())
......
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.