Je pense à quelque chose comme ceci:Quel est le meilleur moyen d'obtenir la valeur min et max à partir d'une liste de Comparables qui contiennent des valeurs null?
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();
}
Mais est non nul sûr, ce qui est quelque chose que je veux aussi.
Savez-vous une meilleure façon de résoudre ce problème?
EDIT:
Après les commentaires que j'ai aussi essayé 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;
}
}});
}
Que pensez-vous de cela?
C'est inefficace car vous avez besoin O (n log n) compare, depuis le TreeSet trie efficacement la collection, où n compare suffisent. En outre, vous créez beaucoup de déchets inutiles (Arrays.asList crée une copie de "ts", et le TreeSet n'est pas léger, aussi). – mfx
Arrays.asList ne fait pas de copie du tableau. –
Oui cela fonctionnerait, mais pourquoi ne pas déclarer et nommer ce comparateur autrement, alors c'est réutilisable? Ensuite, au lieu d'utiliser cette fonction minOf, appelez le fichier Collections.min standard avec ce comparateur nommé. Votre code devient beaucoup plus lisible en utilisant les appels de bibliothèque standard. – Pyrolistical