Java sorte de tableau de Chaîne de noms de fichiers par leur extension
J'ai un tableau de noms de fichiers et de la nécessité de trier ce tableau par les extensions de nom de fichier. Est-il un moyen facile de faire cela?
Vous devez vous connecter pour publier un commentaire.
Complet:
java.util.Les tableaux
etjava.util.Comparateur
.Si je me souviens bien, les Tableaux.de tri(...) prend un Comparateur de<> ce que l'on va utiliser pour faire le tri. Vous pouvez fournir une implémentation de ce qui ressemble à l'extension de la partie de la chaîne.
Vous pouvez mettre en œuvre une coutume Comparateur de Chaînes de caractères. Faire un tri par la sous-chaîne de caractères après le dernier index de
'.'
. Puis la passer dans le comparateur et votre tableau dansComparateurs sont souvent difficiles à obtenir exactement droit, et de la comparaison clé doit être généré pour chaque comparaison qui, pour la plupart des algorithmes de tri moyenne O(n log n). Une autre approche consiste à créer (clé, valeur) paires pour chaque élément que vous avez besoin de les trier, les mettre dans un TreeMap, puis demander les valeurs que ceux-ci sont triés en fonction de la clé.
Par exemple
imprime
Vous devriez être facilement en mesure d'adapter le calcul des clés de votre problème.
Ce ne calcule la clé une fois par entrée, donc O(n) - (mais le genre est toujours en O(n log n)). Si la clé de calcul est cher ou n est grand, cela pourrait être tout à fait mesurable.
Créer un Comparateur, comparer la chaîne d'extensions. Jetez un oeil à la suite de
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Comparator.html
Puis la passer dans votre Liste de chaînes, de Tableaux.de tri(Liste, Comparateur)
Créer votre propre Comparateur qui traite les chaînes de caractères comme des noms de fichiers et les compare entre eux sur la base des extensions. Ensuite, utilisez Les tableaux de.tri avec le Comparateur argument.
Si vous voulez juste de regrouper les fichiers par leur extension et ne se soucient pas du réel, selon l'ordre alphabétique, vous pouvez utiliser ceci:
Je pense que la chose la plus simple que vous pouvez faire qui fonctionne également lorsque le filenname n'est pas une "." est à juste inverser les noms et de les comparer.
Ses une honte que de java chaîne n'ont même pas de reverse().