গুগল পেয়ারা একটি শিকারী যা সর্বদা ফিরে আসেtrue
। জাভা 8 এর কি এর সাথে কিছু মিল রয়েছে Predicate
? আমি জানি যে আমি ব্যবহার করতে পারি (foo)->{return true;}
, তবে আমি প্রাক-তৈরির মতো কিছু চাই, যার সাথে সদৃশ Collections.emptySet()
।
গুগল পেয়ারা একটি শিকারী যা সর্বদা ফিরে আসেtrue
। জাভা 8 এর কি এর সাথে কিছু মিল রয়েছে Predicate
? আমি জানি যে আমি ব্যবহার করতে পারি (foo)->{return true;}
, তবে আমি প্রাক-তৈরির মতো কিছু চাই, যার সাথে সদৃশ Collections.emptySet()
।
উত্তর:
জাভা ৮-এ কোনও অন্তর্নির্মিত সদা-সত্য এবং সর্বদা-মিথ্যা পূর্বাভাস নেই these এগুলি লেখার সর্বাধিক সংক্ষিপ্ত উপায়
x -> true
এবং
x -> false
এগুলির সাথে তুলনা করুন
Predicates.alwaysTrue() // Guava
এবং শেষ পর্যন্ত একটি বেনামে অভ্যন্তর শ্রেণীর কাছে:
new Predicate<Object>() {
public boolean test(Object x) {
return true;
}
}
সম্ভবত পেয়ারার এই অন্তর্নির্মিত পূর্বাভাসগুলি রাখার কারণটি হ'ল অজ্ঞাতনামা অভ্যন্তর শ্রেণীর উপর স্থির পদ্ধতি কল করার একটি বিশাল সিনট্যাকটিক সুবিধা রয়েছে। জাভা 8-এ, ল্যাম্বদা সিনট্যাক্সটি এত সংক্ষিপ্ত যে স্থির পদ্ধতি কলটি লেখার ক্ষেত্রে সিনট্যাকটিক অসুবিধা রয়েছে ।
যদিও এটি কেবল একটি সিনট্যাকটিক তুলনা। x -> true
একাধিক ক্লাস জুড়ে ছড়িয়ে পড়া ঘটনার তুলনায় যদি একক বিশ্বব্যাপী সর্বদা-সত্য ভবিষ্যদ্বাণী থাকত তবে সম্ভবত একটি ছোট স্থানের সুবিধা রয়েছে যার মধ্যে প্রতিটি তার নিজস্ব প্রাকটিক উদাহরণ তৈরি করবে। আপনি কি এই সম্পর্কে উদ্বিগ্ন? সঞ্চয়গুলি বাধ্যতামূলক বলে মনে হয় নি, সম্ভবত এই কারণেই তারা প্রথম স্থানে যুক্ত হয়নি। তবে এটি ভবিষ্যতের মুক্তির জন্য পুনর্বিবেচনা করা যেতে পারে।
আপডেট 2015-04-24
আমরা স্ট্যাটিক বিভিন্ন যোগে বিবেচিত করেছি, যেমন নামে ফাংশন Predicate.alwaysTrue
, Runnable.noop
ইত্যাদি, এবং আমরা জাভা SE ভবিষ্যত যে কোন আরো যোগ না করার সিদ্ধান্ত নিয়েছি।
অবশ্যই কোনও কিছুর কিছু মান আছে যার একটি নাম বনাম একটি লিখিত আউট লাম্বদা রয়েছে, তবে এই মানটি খুব কম। আমরা আশা করি মানুষ শিখতে হবে পড়া কিভাবে এবং লেখার x -> true
এবং () -> { }
এবং তাদের ব্যবহার কথ্য পরিণত করবে। এমনকি মানFunction.identity()
ওভারেরx -> x
প্রশ্নবিদ্ধ।
একটি লিখিত আউট লাম্বদা মূল্যায়ন না করে বিদ্যমান ফাংশনটি পুনরায় ব্যবহার করার জন্য একটি ছোট্ট পারফরম্যান্স সুবিধা রয়েছে তবে আমরা প্রত্যাশা করি যে এই ধরণের ফাংশনগুলির ব্যবহার এত ছোট হবে যে এই জাতীয় সুবিধাটি উপেক্ষিত হবে, এটিআইপি ব্লাটের পক্ষে অবশ্যই উপযুক্ত নয়।
হোলার যেমন Predicate.or
এবং যেমন রচিত ফাংশনগুলি অনুকূল করে তোলার সম্ভাবনা সম্পর্কেও মন্তব্য করেছিলেন । এটিও বিবেচিত হয়েছিল ( জেডিকে -8067971) ) তবে এটি কিছুটা ভঙ্গুর এবং ত্রুটি-প্রবণ ঘটেছিল যে এটি বাস্তবায়নের প্রচেষ্টাটির পক্ষে কার্যকর ছিল না।
এই ল্যাম্বদা FAQ এন্ট্রিটিও দেখুন See
Predicate.alwaysTrue()
দুর্ঘটনাক্রমে লেখার বিষয়টিও ফাঁস হয়ে যেতে পারে Predicate.alwaysFalse()
।
alwaysTrue()
এবং alwaysFalse()
। আসল ল্যাম্বদা সহ আমার অনেকগুলি প্রকরণ রয়েছে; আমি মূলত প্রতিটি সময় সূত্রটি পুনর্গঠন করছি। সংক্ষেপে, alwaysTrue()
আমি যা করতে চাই তার জন্য একটি অর্থপূর্ণ লেবেল; x->true
আসলে প্রতিটি সময় আবার এটি করছেন। বিশাল নয়, তবে একটি বিবেচনা।
Predicate.alwaysTrue()
এবং Predicate.alwaysFalse()
দৃষ্টান্ত যে, তারা মত পদ্ধতি মিশ্রন দ্বারা স্বীকৃত হতে পারে, হয় Predicate.or
, Predicate.and
এবং Predicate.negate()
। এটি ওভারহেড ছাড়াই একত্রিত করে Predicate
ভেরিয়েবলগুলি প্রি-ইনিশিয়ালাইজ করতে alwaysTrue()
এবং পূর্বাভাস যুক্ত করতে দেয় and
। যেহেতু ল্যাম্বদা এক্সপ্রেশনগুলির কোনও অবজেক্ট আইডেন্টিটি গ্যারান্টি নেই, এটি এটির সাথে ব্যর্থ হতে পারে x->true
। যাইহোক, যদি আমার X
কোনও static
পদ্ধতি সহ ক্লাস থাকে তবে y(){return true;}
ব্যবহারের X::y
চেয়ে আরও খাটো x->true
তবে সত্যিকারের প্রস্তাবিত নয় ...
x -> true
অসুবিধা রয়েছে যে আমাকে ব্যবহার ছাড়াই ভেরিয়েবল ব্যবহার করতে হবে। এটি অপ্রয়োজনীয় মস্তিষ্কের বোঝা এবং আমার আইডিইতে একটি সতর্কতা তৈরি করে। আমি ব্যবহার করার চেষ্টা করেছি _ -> true
, কিন্তু এটি একটি সিনট্যাক্স ত্রুটি। জাভা অবশ্যই "অব্যবহৃত প্যারামিটার" এর জন্য একটি কীওয়ার্ড (পড়ুন: কীলেটটার) অনুপস্থিত। আশা করি জাভা 9-এ এই জাতীয় কিছু আসবে (বা কমপক্ষে: আমার মৃত্যুর আগে জাভা যাই হোক ^^)
পেয়ারা ছাড়া
Boolean.TRUE::booleanValue
Predicate
কোনও নয়, কারণ এটি কোনও যুক্তি গ্রহণ করে না।
(foo)->{return true;}
আমি সবচেয়ে ভাল করতে পারি তবে আমি আরও ভাল চাই। তবে আপনি আনেনx->true
, যা অনেক ভাল এবং প্রথম সংখ্যাটি প্রশমিত করে। দ্বিতীয় ইস্যুটি যুক্তি বনাম স্থির ঘোষণার। যদি আমি ব্যবহারx->true
করি তবে এখনও যুক্তি জড়িত রয়েছে, যা আমি অজান্তেই স্ক্রু আপ করতে পারি (উদাঃx->!true
)। তবে এর সাথেPredicate.alwaysTrue()
যুক্তি ত্রুটির শূন্য স্থান রয়েছে, কারণ এখানে কেবল দুটি বা দুটি একই পদ্ধতি রয়েছে। প্লাস আমি বিনামূল্যে আইডিই কোড সমাপ্তি পেতে।x->true
প্রায় ঠিক আছে, তবে আমিPredicate.alwaysTrue()
উপরের কারণে একটি পদ্ধতি লিখেছি ।