'Ptionচ্ছিক


92

আমার জাভাতে নিম্নলিখিত অনুসন্ধান কোড রয়েছে:

return getTableViewController().getMe().getColumns().stream().filter($->Database.equalsColumnName($.getId(), columnId)).findFirst().get();

আমি নাম অনুসারে কলাম খুঁজে পেতে এবং প্রথমে পাওয়া একটি ফিরে পেতে ইচ্ছুক ছিল।

আমি বুঝতে পারি একটি মামলা আছে যখন কিছুই পাওয়া যায় নি এবং এটি প্রক্রিয়া করা উচিত, তবে কীভাবে?

এই শপথ করে কি এটি চায়:

'Optional.get()' without 'isPresent()' check

?

কিভাবে ঠিক করবো? আমি nullকিছু না পেলে ফিরে যেতে ইচ্ছুক ।

হালনাগাদ

ঠিক আছে, ঠিক আছে, আমি বুঝতে পারি না, এটি findFirst()ফিরে আসে Optional


4
নোট করুন যে আপনার $জাভাতে সনাক্তকারী হিসাবে ব্যবহার করা উচিত নয় : জেএলএস সেক 3.8 : " acy চিহ্নটি কেবল যান্ত্রিকভাবে উত্পন্ন উত্স কোডে ব্যবহার করা উচিত বা খুব কমই, উত্তরাধিকার ব্যবস্থাতে প্রাক-বিদ্যমান নামগুলি অ্যাক্সেস করতে।"
অ্যান্ডি টার্নার

উত্তর:


187

get()সঙ্গে প্রতিস্থাপন orElse(null)


4
কেন? :) কেন orElseশুরু হয় "বা" দিয়ে?
Dims

15
কারণ যে পদ্ধতি নাম। এবং elseএকটি কীওয়ার্ড।
অ্যান্ডি টার্নার

8
@ এটি getOrElse এর একটি সংক্ষিপ্ত ফর্মটি দেখায়, সবেমাত্র এটিকে বাইরে রেখে। Alচ্ছিক সাথে আপনার orElseপরিবর্তে সাধারণত ব্যবহার করা উচিত getকারণ getমানটি শূন্য হলে একটি ব্যতিক্রম ছুঁড়ে দেবে।
পুহলেন

4
@ পুহলেন orElseGet()একটি নেয় Supplier<T>, তবে orElse()একটি নেয় T। এগুলি সমতুল্য নয়।
বিসিএসবি 1001

4
@ বিসিএসবি 1001 এটাই তিনি বলার চেষ্টা করেননি, "getOrElse" এমন একটি নাম যা তিনি উদ্দিষ্ট উদ্দেশ্য ব্যাখ্যা করতে উদ্ভাবন করেছেন orElse; orElseGetতাঁর মন্তব্যে কোনও রেফারেন্স নেই ;)
রোরিম

22
...findFirst().orElse(null);

উপস্থিত থাকলে মান প্রদান করে, অন্যথায় ফেরত দেয় null। ডকুমেন্টেশন বলছে যে পাস করা প্যারামিটার হতে পারে null(যা নিষিদ্ধ orElseGetএবং এর জন্য নিষিদ্ধ)orElseThrow )।


4
এটি আংশিক সত্য। ফাইন্ড ফার্স্ট () এর নিম্নলিখিত নিয়ম রয়েছে: "যখন কোনও এনকাউন্টার অর্ডার না হয় এটি স্ট্রিম থেকে কোনও উপাদান ফেরত দেয়" " -> সুতরাং যদি আপনার ফিল্টারটি মিলে যাওয়া উপাদানটি না ফেরায়, ফাইন্ড ফার্স্ট () প্রথমে ফিরে আসবে (স্ট্রিমটি আগে খালি খালি বাদে)
Fl0R1D3R


0

Theseচ্ছিকটি তৈরি করা হয়েছিল যাতে কোডটি এত দশক পরেও শেষ পর্যন্ত ਾਲ এড়ানো শুরু করে ।

.Get () সরান, itselfচ্ছিক নিজেই ফিরে আসুন এবং কলিং কোডটিকে এটির সাথে যথাযথভাবে করুন (ঠিক যেমনটি আপনি বাতিল হয়ে যাবেন সেই ক্ষেত্রে এটি করতে হবে)।

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