मैं कुछ के बारे में इस तरह सोच रहा हूँ:तुलनात्मक सूची की सूची से न्यूनतम और अधिकतम मान प्राप्त करने का सबसे अच्छा तरीका क्या है जिसमें मुख्य मूल्य शून्य होते हैं?
public static <T extends Comparable<T>> T minOf(T...ts){
SortedSet<T> set = new TreeSet<T>(Arrays.asList(ts));
return set.first();
}
public static <T extends Comparable<T>> T maxOf(T...ts){
SortedSet<T> set = new TreeSet<T>(Arrays.asList(ts));
return set.last();
}
लेकिन अशक्त सुरक्षित है, जो कुछ मैं भी चाहता हूँ नहीं है।
क्या आप इस समस्या को हल करने के लिए एक बेहतर तरीका जानते हैं?
संपादित करें:
टिप्पणी के बाद मैं भी कोशिश की है मिनट():
public static <T extends Comparable<T>> T minOf(T...ts){
return Collections.min(Arrays.asList(ts), new Comparator<T>(){
public int compare(T o1, T o2) {
if(o1!=null && o2!=null){
return o1.compareTo(o2);
}else if(o1!=null){
return 1;
}else{
return -1;
}
}});
}
क्या आप इस बात का लगता है?
कि अक्षम है, क्योंकि आप हे की जरूरत है (एन एन लॉग इन करें) तुलना, के बाद से TreeSet प्रभावी रूप से संग्रह सॉर्ट करता है, जहां n पर्याप्त है। इसके अलावा, आप बहुत सारे अपर्याप्त कचरे का निर्माण करते हैं (Arrays.asList "ts" की एक प्रति बनाता है, और ट्रीसेट भी हल्का नहीं है)। – mfx
Arrays.asList सरणी की एक प्रति नहीं बनाता है। –
हां जो काम करेगा, लेकिन क्यों नहीं घोषित करें और उस तुलनित्र को नाम दें जहां यह पुन: प्रयोज्य है? फिर इस minOf फ़ंक्शन का उपयोग करने के बजाय, उस मानक तुलनित्र के साथ मानक संग्रह .min को कॉल करें। मानक लाइब्रेरी कॉल का उपयोग कर आपका कोड अधिक पठनीय हो जाता है। – Pyrolistical