জাভা 8 এবং উপরের উত্তর (ল্যাম্বডা এক্সপ্রেশন ব্যবহার করে)
জাভা 8-এ, এটিকে আরও সহজ করার জন্য ল্যাম্বদা এক্সপ্রেশনগুলি চালু করা হয়েছিল! এর সমস্ত স্ক্যাফোল্ডিংয়ের সাথে একটি তুলনামূলক () অবজেক্ট তৈরি করার পরিবর্তে আপনি এটিকে নিম্নরূপে সহজ করতে পারেন: (উদাহরণ হিসাবে আপনার বস্তুটি ব্যবহার করে)
Collections.sort(list, (ActiveAlarm a1, ActiveAlarm a2) -> a1.timeStarted-a2.timeStarted);
বা আরও ছোট:
Collections.sort(list, Comparator.comparingInt(ActiveAlarm ::getterMethod));
এই একটি বিবৃতি নিম্নলিখিত সমতুল্য:
Collections.sort(list, new Comparator<ActiveAlarm>() {
@Override
public int compare(ActiveAlarm a1, ActiveAlarm a2) {
return a1.timeStarted - a2.timeStarted;
}
});
ল্যাম্বডা এক্সপ্রেশনগুলি কেবলমাত্র কোডের প্রাসঙ্গিক অংশে রাখার প্রয়োজন হিসাবে ভাবুন: পদ্ধতির স্বাক্ষর এবং কী ফিরে আসে।
আপনার প্রশ্নের আর একটি অংশ ছিল একাধিক ক্ষেত্রের সাথে কীভাবে তুলনা করা যায়। লাম্বদা এক্সপ্রেশন দিয়ে তা করতে, আপনি .thenComparing()
কার্যকরভাবে দুটি তুলনা একের সাথে একত্রিত করতে ফাংশনটি ব্যবহার করতে পারেন :
Collections.sort(list, (ActiveAlarm a1, ActiveAlarm a2) -> a1.timeStarted-a2.timeStarted
.thenComparing ((ActiveAlarm a1, ActiveAlarm a2) -> a1.timeEnded-a2.timeEnded)
);
উপরের কোডটি প্রথমে তালিকাটি বাছাই করবে timeStarted
এবং তারপরে timeEnded
(সেই সমস্ত রেকর্ডগুলির জন্য একই timeStarted
)।
একটি সর্বশেষ নোট: 'দীর্ঘ' বা 'অন্তর্গত' আদিমদের তুলনা করা সহজ, আপনি কেবল একটির থেকে অন্যটি বিয়োগ করতে পারেন। আপনি যদি বস্তুর তুলনা করছেন ('লং' বা 'স্ট্রিং'), আমি আপনাকে তাদের বিল্ট-ইন তুলনা ব্যবহার করার পরামর্শ দিই। উদাহরণ:
Collections.sort(list, (ActiveAlarm a1, ActiveAlarm a2) -> a1.name.compareTo(a2.name) );
সম্পাদনা: আমাকে কাজ করতে নির্দেশ করার জন্য লুকাশ ইডারকে ধন্যবাদ .thenComparing()
।