গুগল পেয়ারা সংগ্রহের জন্য নলআরএম্পটি


102

আমি দেখতে পাচ্ছি যে পেয়ারা স্ট্রিংসের জন্য নুলআরএম্পটি ইউটিলিটি পদ্ধতি রয়েছে

Strings.isNullOrEmpty(str)

আমাদের কি তালিকার জন্য কিছু অনুরূপ আছে? কিছুটা এইরকম

Lists.isNullOrEmpty(list)

যার সমতুল্য হওয়া উচিত

list == null || list.isEmpty()

এছাড়াও, অ্যারেগুলির জন্য আমাদের কি অনুরূপ কিছু আছে? কিছুটা এইরকম

Arrays.isNullOrEmpty(arr)

যার সমতুল্য হওয়া উচিত

arr == null || arr.length == 0

উত্তর:


141

না, এই পদ্ধতিটি পেয়ারাতে নেই এবং বাস্তবে এটি আমাদের "আইডিয়া গোরস্থান"।

আমরা বিশ্বাস করি না যে "নাল বা খালি" এমন একটি প্রশ্ন যা আপনি সত্যই কোনও সংগ্রহ সম্পর্কে জিজ্ঞাসা করতে চান।

যদি কোনও সংগ্রহ শূন্য হতে পারে, এবং শূন্যটিকে একইভাবে খালি মনে করা উচিত, তবে এই সমস্ত অস্পষ্টতাটিকে সামনের দিকের দিক থেকে সরিয়ে নিন:

Set<Foo> foos = NaughtyClass.getFoos();
if (foos == null) {
  foos = ImmutableSet.of();
}

বা এটি পছন্দ করুন (যদি আপনি চান):

Set<Foo> foos = MoreObjects.firstNonNull(
    NaughtyClass.getFoos(), ImmutableSet.<Foo>of());

এর পরে, আপনি কেবল .isEmpty()সাধারণের মতো ব্যবহার করতে পারেন । দুষ্টু এপিআই কল করার সাথে সাথে এটি করুন এবং অনির্দিষ্টকালের জন্য চালিয়ে যাওয়ার পরিবর্তে আপনি নিজের পিছনে অদ্ভুততা রেখে গেছেন।

এবং যদি "নাল যার অর্থ খালি সংগ্রহ" আপনাকে ফেরত না দেওয়া হয়, তবে আপনার কাছে পাঠানো হয় তবে আপনার কাজটি সহজ: কেবল একটি NullPointerExceptionনিক্ষেপ করা যাক , এবং সেই কলারটিকে আকার দিন।


7
যদি কোনও কাঠামো এটিকে ফিল্ডটি নালায় স্থাপন করে এবং আপনি এটি নিয়ন্ত্রণ করতে পারবেন না (তালিকার সাথে আবদ্ধ হওয়ার সময় বসন্তের কাঠামো) যদিও আপনি স্পষ্টভাবে বস্তুতে খালি তালিকা সেট এবং ব্যবহার করেন।
ওম্যাক্স

15
আমার উত্তরটি এক রকম: nullযত তাড়াতাড়ি সম্ভব খালি সংগ্রহকে সাধারণ করে অস্পষ্টতা সরিয়ে দেওয়ার চেষ্টা করুন । যদি আপনি কেবল এটি করতে না পারেন তবে ঠিক আছে, আপনি সেই 1% ব্যবহারকারীদের মধ্যে রয়েছেন যাঁরা সত্যই তাদের নিজের তুচ্ছ Nনুলআরএম্পটি (সংগ্রহ) সহায়ক হিসাবে লিখতে চান।
কেভিন বোউরিলিয়ন

8
(বা সাহায্যকারীকে এড়িয়ে যান এবং if (collection == null || collection.isEmpty())আপনার যেখানে প্রয়োজন সেখানে কেবল লিখুন ! এটি কি এত খারাপ?)
কেভিন বোউরিলিয়ন

13
এটি একটি মতামতযুক্ত উত্তর যা আসলে প্রশ্নটিকে মোটেই সমাধান করে না। এটি প্রতিরক্ষামূলক প্রোগ্রামিং নীতিগুলির বিরুদ্ধেও যায়।
নব্যব্রান্ট

11
@ নবজীবন যেহেতু প্রশ্নটি পেয়ারা লাইব্রেরির সামর্থ্য সম্পর্কে, এবং উত্তরটি পেয়ারার অন্যতম প্রধান বিকাশকারী থেকেই এসেছে, উত্তরটি দারুণভাবে বোঝানো হয়েছে: "না, গুয়ারা তেমন নেই"। উত্তরটি যদিও সেই বিবৃতি দিয়ে শুরু করার মাধ্যমে উন্নত হতে পারে :)
গ্রুন্ডলেফ্লেক

37

পেয়ারা জুড়ে আপনি যে বিষয়টি খুঁজে পেতে পারেন তা হ'ল তারা nullএস এর প্রতি খুব বিরোধী হতে থাকে be লেখকরা আপনার nullযতটা সম্ভব ব্যবহার করা থেকে নিরুৎসাহিত করতে চান এবং ব্যবহারকে আরও সহজ করার জন্য ইউটিলিটি পদ্ধতি সরবরাহ করা nullএই পরিণতির বিপরীতে হতে পারে।

আপনি যদি পেয়ারার দৃষ্টান্তটি ব্যবহার করতে চান তবে এই সংগ্রহের উত্সটি (বা অ্যারে) সত্যই .চ্ছিকভাবে ফিরে আসা উচিত কিনা তা বিবেচনা করুন null। যদি তা না হয় তবে এটি চিহ্নিত করার বিষয়টি বিবেচনা করুন @NonNullএবং পরিবর্তে খালি সংগ্রহগুলি ফিরিয়ে দিন null। অথবা কোনও ফাংশনের প্যারামিটার হিসাবে যা মূল্য- nullমূল্যবান তালিকার প্রত্যাশা করে Preconditions.checkNotNull, ব্যবহার বিবেচনা করুন , যা কোনও null(অপ্রত্যাশিতভাবে) পাস হলে ব্যতিক্রম ছুঁড়ে দেয় ।

যদি nullসত্যিই বৈধ হয়, list == null || list.isEmpty()যে হার্ড না।


9
এটি বেমানান। স্ট্রিংসের জন্য একই যুক্তি তৈরি করা যেতে পারে, তবুও একটি স্ট্রিংস রয়েছে is নুলআরএম্পটি ()
ডন

29

কমন্স-সংগ্রহে একটি কালেকশন ইউটিস.আইএসপিটি () রয়েছে।


1
দুর্ভাগ্যক্রমে, এটি আরও সাম্প্রতিক সংস্করণগুলিতে সরানো হয়েছে বলে মনে হয়। Org.apache.commons.collections15. সংগ্রহ সংগ্রহগুলি দেখুন।
spaaarky21

1
জাভাডোকের দিকে apache.commons.col নির্বাচন থেকে পদ্ধতিগুলি হল এম্পটি () এবং isNotEmpty () এখনও সর্বশেষ সংস্করণে বিদ্যমান। সংগ্রহ 15. সংগ্রহ সংগ্রহগুলি একটি সাধারণ প্রকল্পের মতো জেনেরিক সহায়তা সরবরাহ করার চেষ্টা করছে বলে মনে হয়।
প্রোকো

1
উত্তোলন অ্যাপ্লিকেশনগুলির সাথে কাজ করার সময় কালেকশন ইউটিস.এম্পটি () কার্যকর হয়, যখন আপনি সম্মুখের কোডটি পরিবর্তন করতে পারবেন না।
জেরোম ডালবার্ট

1
আমরা এটি জানি, তবে একজন পেয়ারা সম্পর্কে জিজ্ঞাসা করেছিলেন আপাচি কমনের বিষয়ে নয়।
করার ক্রা

9

স্প্রিং ফ্রেমওয়ার্ক বিশেষায়িত ইউজার ক্লাস নামে পরিচিত CollectionUtils। এবং পদ্ধতি আপনি খুঁজছেন হল: org.springframework.util.CollectionUtils.isEmpty। এটি নাল এবং খালি সংগ্রহের জন্য সত্য ফিরে আসে।

এবং অ্যারেগুলির জন্য এমন org.springframework.util.ObjectUtils.isEmptyপদ্ধতি রয়েছে যা বেশ একইরকম আচরণ করে।


5
যদিও এটি সম্ভবত ব্যবহার করা নিরাপদ, এই শ্রেণিটি "ফ্রেমওয়ার্কের অভ্যন্তরীণ অভ্যন্তরীণ ব্যবহারের জন্য মূলত" মন্তব্যে চিহ্নিত হয়েছে। এর অর্থ এটির ইন্টারফেসটি একটি স্প্রিং আপগ্রেডে পরিবর্তিত হতে পারে এবং এটি আবার কাজ করতে আপনাকে অতিরিক্ত কাজ করতে হবে।
মাইক মিনিকি

2

অ্যাপাচি কালেকশন ইউটিলেস 4 -এর একটি পদ্ধতি রয়েছে কালেকটিইটস.ইম্পটিআইফনাল () যা সংগ্রহটি শূন্য থাকলে খালি তালিকা দেয়। এটি ফোরচ লুপে খুব কার্যকর, তাই আপনাকে পুনরাবৃত্তি করার আগে নাল চেক করার দরকার নেই


1

আমার সমাধানটি হ'ল: মোরঅবজেক্টস.ফর্স্টনন নল (তালিকা, সংগ্রহসমূহ empty খালি তালিকা ())

আমি জেডিকে সংগ্রহ সহ পেয়ারা মোরঅবজেক্টগুলি ব্যবহার করছি।

 @Test
public void listnull() {
List<String> list = null;

for (String str : MoreObjects.firstNonNull(list, Collections.<String> emptyList())) {
    System.out.println(str);
}

list = new ArrayList<String>();
list.add("http://stackoverflow.com/");

for (String str : MoreObjects.firstNonNull(list, Collections.<String> emptyList())) {
    System.out.println(str);
}
}

1
আপনি উত্তর ব্যবহার না করে এটি শীর্ষ প্রশ্নের উত্তরে ঠিক একই পরামর্শ দেওয়া হয়েছে ImmutableList
ডিমো 414

আমি নেতিবাচক কারণ এক inNotEmpty ... চেয়েছিলেন Apache কমন্স পদ্ধতি মত সহজ ও দ্রুত সমাধান মনে
করতে ক্রা

সহায়তা কেন্দ্র> সুবিধাগুলি> ভোট দাও আমার কবে ভোট দেওয়া উচিত? যখনই আপনি কোনও গুরুতরভাবে opালু, কোনও প্রচেষ্টা-ব্যয় করা পোস্ট, বা স্পষ্ট এবং সম্ভবত বিপজ্জনকরূপে ভুল একটি উত্তর সম্মুখীন হন আপনার ডাউনভোটগুলি ব্যবহার করুন ot আপনার কাছে প্রতিদিন সীমিত সংখ্যক ভোট রয়েছে, এবং ডাউন-ভোটের জবাব দেওয়ার জন্য আপনাকে তার শীর্ষে সামান্য খ্যাতি দিতে হবে; এগুলি বুদ্ধিমানের সাথে ব্যবহার করুন। stackoverflow.com/help/privileges/vote-down
jeton

আপনি কি মনে করেন যে আমার উত্তরটি "অত্যন্ত উদ্বেগজনকভাবে opালু, কোনও প্রয়াস-ব্যয়িত পোস্ট, বা একটি উত্তর যা স্পষ্টভাবে এবং সম্ভবত বিপজ্জনকভাবে ভুল"? যদি তা না হয় তবে আপনি কেন নেতিবাচক ভোট দিচ্ছেন?
জেটন

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