আমি compareTo()
এই জাতীয় কোনও সাধারণ শ্রেণীর জন্য পদ্ধতি বাস্তবায়ন করছি ( Collections.sort()
জাভা প্ল্যাটফর্ম দ্বারা প্রদত্ত অন্যান্য গুডিজ ব্যবহার করতে সক্ষম হতে ):
public class Metadata implements Comparable<Metadata> {
private String name;
private String value;
// Imagine basic constructor and accessors here
// Irrelevant parts omitted
}
আমি এই জিনিসগুলির প্রাকৃতিক ক্রমটি চাই : 1) নাম অনুসারে বাছাই করা এবং 2) নাম অনুসারে বাছাই করা যদি নাম একই হয়; উভয় তুলনা ক্ষেত্রে সংবেদনশীল হতে হবে। উভয় ক্ষেত্রে নাল মান পুরোপুরি গ্রহণযোগ্য, সুতরাং compareTo
এই ক্ষেত্রে ভঙ্গ করা উচিত নয়।
যে সমাধানটি মনে মনে আসে তা হ'ল নিম্নলিখিত পংক্তির বরাবর (আমি এখানে "গার্ড ক্লজ" ব্যবহার করছি অন্যরা হয়ত একক রিটার্ন পয়েন্ট পছন্দ করতে পারে তবে এটি সেই বিন্দুর পাশে):
// primarily by name, secondarily by value; null-safe; case-insensitive
public int compareTo(Metadata other) {
if (this.name == null && other.name != null){
return -1;
}
else if (this.name != null && other.name == null){
return 1;
}
else if (this.name != null && other.name != null) {
int result = this.name.compareToIgnoreCase(other.name);
if (result != 0){
return result;
}
}
if (this.value == null) {
return other.value == null ? 0 : -1;
}
if (other.value == null){
return 1;
}
return this.value.compareToIgnoreCase(other.value);
}
এটি কাজটি করে তবে আমি এই কোডটি নিয়ে পুরোপুরি খুশি নই। স্বীকারযোগ্যভাবে এটি খুব জটিল নয়, তবে এটি বেশ ভার্জোজ এবং ক্লান্তিকর।
প্রশ্নটি হল, আপনি কীভাবে এই কম ভারবোস তৈরি করবেন (কার্যকারিতা ধরে রাখার সময়)? জাভা স্ট্যান্ডার্ড গ্রন্থাগারগুলি বা অ্যাপাচি কমন্স যদি তারা সহায়তা করে তবে নির্দ্বিধায় পড়ুন। এটিকে (কিছুটা) সহজ করার একমাত্র বিকল্পটি কি আমার নিজের "নুলসেফস্ট্রিংকম্পেরেটর" প্রয়োগ করতে এবং উভয় ক্ষেত্রের সাথে তুলনা করার জন্য এটি প্রয়োগ করতে পারে?
সম্পাদনা ২-৩ : এডির ডান; উপরে "উভয় নাম নাল" কেস স্থির করে নিন
গৃহীত উত্তর সম্পর্কে
আমি ২০০৯ সালে অবশ্যই জাভা ১.6-এ এই প্রশ্নটি জিজ্ঞাসা করেছি এবং সেই সময় এডির খাঁটি জেডি কে সমাধানটি আমার পছন্দের স্বীকৃত উত্তর ছিল was আমি এখন পর্যন্ত (2017) এটিকে পরিবর্তন করতে পারি নি।
এছাড়াও তৃতীয় পক্ষের লাইব্রেরি সমাধানগুলি রয়েছে - ২০০৯ এপাচি কমন্স সংগ্রহগুলি একটি এবং একটি 2013 পেয়ারা, উভয়ই আমার দ্বারা পোস্ট করা হয়েছিল - যেটি আমি কিছু সময় পছন্দ করেছি।
আমি এখন লুকাশ ভিক্টরের ক্লিন জাভা 8 সমাধানটি গ্রহণযোগ্য উত্তর হিসাবে তৈরি করেছি। এটি অবশ্যই জাভা 8 এ পছন্দ করা উচিত এবং আজকাল জাভা 8 প্রায় সমস্ত প্রকল্পের জন্য উপলব্ধ হওয়া উচিত।