10
votes

Trier la matrice d'abord par longueur puis alphabétiquement en java

Comment puis-je trier une matrice d'abord par la longueur, puis alphabétiquement?

J'ai une liste de choses avec des chiffres sur eux et je reçois actuellement:

quelque chose1 Quelque chose10 Quelque chose2 Quelque chose3

Alors que je veux obtenir:

quelque chose1 quelque chose2 quelque chose3 quelque chose10


4 commentaires

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.


6 Réponses :


4
votes

Créer un comparateur qui se compare par la longueur d'abord et si les longueurs sont identiques, utilise la chaîne.careto ().


1 commentaires

Notez également l'existence de comparèteOignorecase () .



25
votes
Collections.sort(yourList, new MyComparator());

5 commentaires

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



1
votes

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.


0 commentaires

0
votes

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. xxx

par exemple: xxx

Disclaimer, je n'ai pas réellement testé ce code, mais il devrait être proche de ce que vous voulez .


0 commentaires

9
votes

Voici une solution de java 8 concise:

list.sort(Comparator.comparing(String::length).thenComparing(String::compareToIgnoreCase));


0 commentaires

0
votes

En utilisant Lambda, le programme Java ressemblait à. XXX


0 commentaires