জাভাতে নাল এবং ফাঁকা সংগ্রহকে বৈধতা দেওয়ার সেরা অনুশীলন


209

আমি কোনও সংগ্রহ খালি কিনা তা যাচাই করতে চাই null। যে কেউ দয়া করে আমাকে সেরা অনুশীলন সম্পর্কে জানাতে পারেন।

বর্তমানে, আমি নীচের হিসাবে পরীক্ষা করছি:

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

10
অন্য যে কোনও কিছু বাদ দিয়ে আপনি কেন ব্যবহার null == sampleMapনা করে সে সম্পর্কে ভেবে দেখুন sampleMap == null। বেশিরভাগ লোকই উত্তরটিকে আরও বেশি পঠনযোগ্য বলে মনে করেন - পূর্ববর্তীটি অন্যান্য ভাষাগুলির হোল্ডওভার।
জন স্কিটি

6
যাইহোক, নাল সংগ্রহ খারাপ। সম্ভব হলে পরিবর্তে এটি খালি সংগ্রহ করুন collection See Effective Java: Item 43 - Return empty arrays or collections, not nulls.
声 远 শেনগুয়ান লু

@ জোনস্কিটের লোকেরা == এর পরিবর্তে = লিখলে নাল == নমুনা মানচিত্র ব্যবহার করেন। আপনি যদি নমুনা মানচিত্র == নাল ব্যবহার করেন, যখন আপনি একটি = ভুলে যান, এটি নমুনা ম্যাপ = নাল হয়ে যায়, যা অন্যভাবে এভাবে ত্রুটি বাড়াবে না এটি বিকাশকারীকে এটি দেখতে সহায়তা করে
উরি লোয়া

1
@ উরিলোয়া: if (null = sampleMap)জাভাতে লিখলে আপনি সংকলনের ত্রুটি পাবেন। এটি আমার প্রথম মন্তব্যের অবিকল বিষয়। এর "কারণ" ভাষা-নির্দিষ্ট, তবে পাঠযোগ্যতার জরিমানা সত্ত্বেও অন্য ভাষায় প্রচার করা হয়েছে কারণ লোকেরা কেন এটি করছে তা বিবেচনা করে না ।
জন স্কিটি

আপনি org.apache.commons.collections4. Colલેક્શનUtils প্যাকেজে উপস্থিত কালেকশন ইউটিস ক্লাসটি ব্যবহার করতে পারেন। খালি বা নাল খুঁজে পাওয়ার জন্য অনেকগুলি ইউটিলিটি পদ্ধতি রয়েছে।
বিকাশ

উত্তর:


312

আপনি যদি আপনার প্রকল্পে অ্যাপাচি কমন্স সংগ্রহের গ্রন্থাগার ব্যবহার করেন তবে আপনি সংগ্রহগুলি বা মানচিত্রটি খালি বা নাল কিনা তা যথাক্রমে পরীক্ষা করে CollectionUtils.isEmptyএবং MapUtils.isEmpty()পদ্ধতিগুলি ব্যবহার করতে পারেন (যেমন তারা "নাল-নিরাপদ")।

এই পদ্ধতির পিছনে কোডটি ব্যবহারকারী আইকজা তার উত্তরে যা লিখেছেন তা কমবেশি।

আপনি যা-ই করুন না কেন, মনে রাখবেন যে আপনি যত কম কোড লিখবেন, আপনার কোডের জটিলতা হ্রাস হওয়ার সাথে সাথে আপনাকে পরীক্ষা করার দরকার কম কোড।


1
ধন্যবাদ ম্যাপ ইউটিলস.আইএসপিটি মানচিত্রটি শূন্য বা খালি চেক করার সঠিক সমাধান
নারায়ণ যেরবাবাচু

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
অবশ্যই, আপনি মানচিত্রের জন্যও একটি যুক্ত করতে পারেন, তবে শিরোনাম বিবরণ সংগ্রহ।
আইজজা

1
আমি বুঝতে পারছি না যদি এম নাল হয় তবে .Empty () নালপয়েন্টার এক্সসেপশন রিথের কারণ হবে? অন্যথায়, যদি বাম দিকটি (এম == নাল) সত্য হয় তবে
অবশিষ্টগুলি

4
@ ইসমাইল ||অপারেটর একটি শর্ট সার্কিট অপারেটর, মানে বাম অপারেণ্ড যদি হয় তবে এটি ডান অপরেন্ডকে trueমূল্যায়ন করবে না। সুতরাং, যদি m == nullতারপর m.isEmpty()ডাকা হবে না (প্রয়োজন হয় না, ফলাফল হয় true)।
আইকজা

নিশ্ছিদ্র সমাধান @icza
গৌরব

32

যদি আপনি স্প্রিং ফ্রেমওয়ার্কগুলি ব্যবহার করেন তবে আপনি CollectionUtilsউভয় সংগ্রহ (তালিকা, অ্যারে) এবং মানচিত্র ইত্যাদির বিরুদ্ধে পরীক্ষা করতে ব্যবহার করতে পারেন

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

সম্ভবত, আপনি মানচিত্রের জন্য MapUtils.isEmpty () সম্পর্কে কথা বলছেন, তবে সমস্ত সংগ্রহের জন্য নয়?
পাভলো চেচহভ

21

ব্যক্তিগতভাবে, আমি পরিবর্তে খালি সংগ্রহগুলি ব্যবহার করতে পছন্দ করি nullএবং অ্যালগরিদমগুলিকে এমনভাবে কাজ করতে হবে যে আলগোরিদমের জন্য সংগ্রহটি খালি কিনা তা বিবেচনা করে না।


10

আপনি যখন বসন্ত ব্যবহার করেন তখন আপনি ব্যবহার করতে পারেন

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

যেখানে আপত্তিটি কোনও [মানচিত্র, সংগ্রহ, অ্যারে, আয়েটিং ...]

অন্যথায়: কোডটি হ'ল:

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

আপনার যদি নাল পরীক্ষা করার দরকার হয় তবে সেটাই উপায়। তবে এটির যদি আপনার নিয়ন্ত্রণ থাকে, কেবল যখনই আপনি পারেন খালি সংগ্রহটি ফিরিয়ে দিন এবং কেবল পরে খালি পরীক্ষা করুন।

এই থ্রেডটি সি # এর সাথে একই জিনিস, তবে নীতিগুলি জাভাতেও সমানভাবে কার্যকর হয়। এখানে উল্লিখিত মত, নালটি কেবল যদি ফেরত দেওয়া উচিত

  • নাল অর্থ আরও নির্দিষ্ট কিছু বোঝাতে পারে;
  • আপনার এপিআই (চুক্তি) আপনাকে শূন্য ফিরে আসতে বাধ্য করতে পারে।

3

আপনি ব্যবহার করতে পারেন org.apache.commons.lang.Validateএর " notEmpty " পদ্ধতি:

Validate.notEmpty(myCollection)-> যাচাই করুন যে নির্দিষ্ট যুক্তি সংগ্রহটি নাল নয় বা শূন্যের আকার নয় (কোনও উপাদান নেই); অন্যথায় একটি ব্যতিক্রম ছোঁড়া।


1

আমরা কোনও সংগ্রহের জিনিসটি খালি, নাল বা না তা পরীক্ষা করব। এই সমস্ত পদ্ধতি যা নীচে দেওয়া হয়েছে, org.apache.commons.collections4. CollectionsUtils প্যাকেজে উপস্থিত রয়েছে।

সংগ্রহ বা অবজেক্টের ধরণের তালিকা বা পরীক্ষা করুন।

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

মানচিত্রের অবজেক্টের পরীক্ষা করুন।

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

সমস্ত পদ্ধতির রিটার্নের ধরণটি বুলিয়ান।


-1

মানচিত্র ব্যবহার সহ সমস্ত সংগ্রহের জন্য: isEmptyপদ্ধতি যা এই সংগ্রহ অবজেক্টগুলিতে রয়েছে। তবে আপনাকে আগে নাল চেক করতে হবে:

Map<String, String> map;

........
if(map!=null && !map.isEmpty())
......
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.