Comment puis-je trier une matrice d'abord par la longueur, puis alphabétiquement? p>
J'ai une liste de choses avec des chiffres sur eux et je reçois actuellement: p>
quelque chose1 Quelque chose10 Quelque chose2 Quelque chose3 p>
Alors que je veux obtenir: p>
quelque chose1 quelque chose2 quelque chose3 quelque chose10 p>
6 Réponses :
Créer un comparateur qui se compare par la longueur d'abord et si les longueurs sont identiques, utilise la chaîne.careto (). p>
Notez également l'existence de comparèteOignorecase () code>.
Collections.sort(yourList, new MyComparator());
Le comparateur nécessite un comparète into (OBJ O), non comparable (objet O1, objet O2). Ce code est proche cependant.
@Starkey: C'est comparable. Ceci est comparateur. Vous étiez fermé cependant.
Merci, je devais juste trier des noms de fichiers qui en avaient des chiffres vraiment rapidement et les renommer. Je les avais dans un tableau alors je devais la convertir en une collection, mais cela a travaillé pour mon but. Merci!
@Park Peters Qu'en est-il de la comparaison?
Belle façon de tri + @KeatSeks
Tri d'abord par la longueur et ensuite lexiquement fonctionnera uniquement si les préfixes de la chaîne (c'est-à-dire la partie avant le numéro) de la même longueur dans tous les cas. Je pense que vous voudrez peut-être vraiment écrire un comparateur qui sépare les pièces de la chaîne et des numériques et trie par ordre alphabétique sur la chaîne et numériquement sur la partie numéro. P>
Définir une classe pour contenir votre article dans. On dirait que vous voulez que ce soit une chaîne.
Pour cette classe, vous devez définir l'interface comparable et mettre la logique à comparer dans sa méthode abstraite. P > par exemple: p> Disclaimer, je n'ai pas réellement testé ce code, mais il devrait être proche de ce que vous voulez . p> p>
Voici une solution de java 8 concise:
list.sort(Comparator.comparing(String::length).thenComparing(String::compareToIgnoreCase));
En utilisant Lambda, le programme Java ressemblait à.
Par hasard, devoirs?
Regardez les réponses pour Stackoverflow.com/Questtions/104599/... Si ce que vous voulez vraiment, c'est une sorte qui comprend la partie numéro.
Nope, j'ai juste une tonne de fichiers que je voulais renommer vraiment rapidement. Ils sont numérotés, mais les chiffres doivent être déplacés par un peu et le reste du nom de fichier changé. Mais le commandement naturel du système d'exploitation renvoie généralement 1 10 11 12 13 14 15 16 17 18 19 2 20 etc.
Vous avez essayé simplement d'utiliser des zéros de premier plan dans vos numéros? C'est-à-dire 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11.