En Java, j'ai un Set
et je veux le transformer en un fichier trié. List
. Existe-t-il une méthode dans le java.util.Collections
un logiciel qui fera cela pour moi ?
Merci ! Ce SuppressWarnings m'a toujours dérangé.
En Java, j'ai un Set
et je veux le transformer en un fichier trié. List
. Existe-t-il une méthode dans le java.util.Collections
un logiciel qui fera cela pour moi ?
La réponse fourni par l'OP n'est pas le meilleur. Elle est inefficace, car elle crée une nouvelle List
et un nouveau tableau inutile. De plus, cela soulève des avertissements "non vérifiés" en raison des problèmes de sécurité de type autour des tableaux génériques.
Au lieu de cela, utilisez quelque chose comme ceci :
public static
<T extends Comparable<? super T>> List<T> asSortedList(Collection<T> c) {
List<T> list = new ArrayList<T>(c);
java.util.Collections.sort(list);
return list;
}
Voici un exemple d'utilisation :
Map<Integer, String> map = new HashMap<Integer, String>();
/* Add entries to the map. */
...
/* Now get a sorted list of the *values* in the map. */
Collection<String> unsorted = map.values();
List<String> sorted = Util.asSortedList(unsorted);
@erickson où je dois trouver la classe Util, je veux dire à partir de quel paquet, s'il vous plaît aidez-moi.
@sunleo Le Util
est celle qui contient la classe asSortedList()
méthode que j'ai écrite. En d'autres termes, vous écrivez le Util
vous-même, et mettez ce code dedans.
@Alex : Cette approche peut encore être utilisée ; return new ArrayList(new TreeSet(setIWantSorted))
J'ai en fait utilisé cette solution, mais je ne la conseille pas. Comme l'indique la documentation sur TreeSet (voir download.oracle.com/javase/1.4.2/docs/api/java/util/ ), il utilise effectivement la méthode compareTo() au lieu de la méthode equals(). Ainsi, si vous avez deux objets dans l'ensemble qui ont le même résultat equals(), ils seront considérés comme des doublons et, en tant que tels, ne seront pas ajoutés à l'ensemble TreeSet. Attention.
J'avais un extrait utile dont je voulais faire don à la communauté. Lorsque j'ai cherché l'information, je ne l'ai pas trouvée. J'essayais de faciliter le travail de la personne suivante. stackoverflow.com/questions/18557/
Oui, bien sûr, mais le lien que vous avez fourni parle en fait d'un réel (c'est-à-dire celles pour lesquelles vous n'avez pas la réponse, alors trouvez-la). Votre question ici était seulement de donner la réponse... En fait, je pourrais saisir des centaines de questions et y répondre moi-même ; ce n'est pas le but !
@Seb : Je ne suis pas d'accord. Je ne vois rien de mal dans cette question. Il est évident que ce n'était pas une question extrêmement simple, et maintenant il connaît une meilleure façon de faire qu'avant !
Il est toujours prudent d'utiliser l'interface Comparator ou Comparable pour mettre en œuvre le tri (si l'objet n'est pas une chaîne de caractères ou des classes enveloppes pour les types de données primitifs). Voici un exemple d'implémentation d'un comparateur pour trier les employés en fonction de leur nom
List<Employees> empList = new LinkedList<Employees>(EmpSet);
class EmployeeComparator implements Comparator<Employee> {
public int compare(Employee e1, Employee e2) {
return e1.getName().compareTo(e2.getName());
}
}
Collections.sort(empList , new EmployeeComparator ());
Le comparateur est utile lorsque vous avez besoin d'un algorithme de tri différent pour un même objet (par exemple le nom d'un employé, son salaire, etc.). Le tri en mode unique peut être implémenté en utilisant l'interface Comparable dans l'objet requis.
Il n'existe pas de méthode unique pour le faire. Utilisez ceci :
@SuppressWarnings("unchecked")
public static <T extends Comparable> List<T> asSortedList(Collection<T> collection) {
T[] array = collection.toArray(
(T[])new Comparable[collection.size()]);
Arrays.sort(array);
return Arrays.asList(array);
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.