ich über so etwas wie dieses denke:Was ist der beste Weg, um Min- und Max-Werte aus einer Liste von Vergleichen zu erhalten, in denen main Nullwerte enthält?
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();
}
aber nicht null ist sicher, das auch etwas, was ich will, ist.
Kennen Sie einen besseren Weg, um dieses Problem zu lösen?
EDIT:
Nach den Kommentaren habe ich auch versucht min():
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;
}
}});
}
Was halten Sie davon?
Das ist ineffizient, da Sie O benötigen (n log n) vergleicht, da die TreeSet effektiv die Sammlung sortiert, wobei n genügen vergleicht. Außerdem erstellen Sie viel unnötigen Müll (Arrays.asList erstellt eine Kopie von "ts", und das TreeSet ist auch nicht leicht). – mfx
Arrays.asList erstellt keine Kopie des Arrays. –
Ja, das würde funktionieren, aber warum nicht erklären und den Komparator sonst nennen, wo so wiederverwendbar? Rufen Sie dann, anstatt diese minOf-Funktion zu verwenden, einfach den Standard Collections.min mit dem genannten Komparator auf. Ihr Code wird durch Verwendung von Standardbibliotheksaufrufen deutlich lesbarer. – Pyrolistical