Trier les chaînes comme une fonction caractéristique avec Java

Ce que je veux faire, c'est quand j'ai une liste de chaînes `" insert "," create "," drop "`, je veux les trier dans l'ordre que j'aime, pas dans l'ordre naturel. Plus précisément, je veux trier dans l'ordre "drop", "create", "insert" `` `.

Dans ce cas, les éléments de l'ensemble étant limités, en SQL, il suffit de trier par `` cas '' avec la fonction caractéristique. Je veux faire la même chose avec java.

environnement

java 1.8

code

Avoir une fonction caractéristique dans Map

Il a une fonction caractéristique équivalente dans `` Map ''. key est un élément de l'ensemble et value est un entier dans l'ordre de tri.

Map<String, Integer> map = new HashMap<>();
map.put("drop", 1);
map.put("create", 2);
map.put("insert", 3);

List<String> list = Arrays.asList("insert", "create", "drop");
list.stream()
	.sorted((s1, s2) -> map.get(s1).compareTo(map.get(s2)))
	.forEach(System.out::println);

Résultat de sortie.

drop
create
insert

Trier les noms de fichiers dans n'importe quel ordre

La situation où cela était nécessaire était que je voulais trier les fichiers dans un ordre particulier. Par exemple, supposons que vous ayez un groupe de fichiers comme celui-ci.

0001_create.sql
0001_drop.sql
0001_insert.sql
0002_create.sql
0002_drop.sql
0002_insert.sql

Je voulais obtenir la liste des fichiers dans l'ordre du préfixe + suffixe dans le [drop-> create-> insert] mentionné ci-dessus.

C'est pourquoi le code source.

Map<String, Integer> map = new HashMap<>();
map.put("drop.sql", 1);
map.put("create.sql", 2);
map.put("insert.sql", 3);

Files.walk(Paths.get("files"))
	.filter(Files::isRegularFile)
	.sorted((p1, p2) -> {
		String[] sp1 = p1.getFileName().toString().split("_");
		String[] sp2 = p2.getFileName().toString().split("_");

		String pp1 = sp1[0] + map.get(sp1[1]);
		String pp2 = sp2[0] + map.get(sp2[1]);
		return pp1.compareTo(pp2);})
	.forEach(System.out::println);

Résultat de sortie.

files\0001_drop.sql
files\0001_create.sql
files\0001_insert.sql
files\0002_drop.sql
files\0002_create.sql
files\0002_insert.sql

Cela ne change pas ce que vous faites. Séparez les noms de fichiers par un séparateur et convertissez la partie du suffixe en un entier dans l'ordre de tri avec une table de fonctions caractéristique. Si vous les attachez dans l'ordre du préfixe, vous obtiendrez les chaînes de caractères `" 00013 "," 00012 "," 00011 "`, donc tout ce que vous avez à faire est `` `compareTo```.

Recommended Posts

Trier les chaînes comme une fonction caractéristique avec Java
tri de bulles java
Manipulation des chaînes Java
java sélectionner le tri
[Java] Précautions lors de la comparaison de chaînes de caractères avec des chaînes de caractères
java insert tri
Calculer le score de similarité des chaînes de caractères avec JAVA
Installez java avec Homebrew
Changer de siège avec Java
Installez Java avec Ansible
Téléchargement confortable avec JAVA
Tri Java japonais (Kanji)
Changer java avec direnv
Téléchargement Java avec Ansible
Raclons avec Java! !!
Construire Java avec Wercker
Conversion Endian avec JAVA
[Java] Trier ArrayList avec des éléments de votre propre classe
J'ai essayé d'implémenter Sterling Sort avec Java Collector
(Java) BDD facile avec Spectrum?
Utiliser des couches Lambda avec Java
Créer un multi-projet Java avec Gradle
Premiers pas avec Java Collection
Configuration Java avec Spring MVC
Authentification de base avec Java 11 HttpClient
Expérimentons l'expansion en ligne Java
Exécuter un lot avec docker-compose avec Java batch
[Template] Connexion MySQL avec Java
Réécrire Java try-catch avec facultatif
Installez Java 7 avec Homebrew (cask)
[Java] Communication JSON avec jackson
Java pour jouer avec Function
Activer Java EE avec NetBeans 9
[Java] JavaConfig avec classe interne statique
Exploitons Excel avec Java! !!
Gestion des versions Java avec SDKMAN
Cryptage / décryptage RSA avec Java 8
Pagination de PDF avec Java + PDFBox.jar
Orienté objet avec Strike Gundam (java)
[Java] Acquisition de contenu avec HttpCliient
Gestion des versions Java avec jenv
Dépannage avec Java Flight Recorder
Rationalisez les tests Java avec Spock
Connectez-vous à DB avec Java
Connectez-vous à MySQL 8 avec Java
Erreur lors de la lecture avec java
Utilisation de Mapper avec Java (Spring)
Mémo d'étude Java 2 avec Progate
Premiers pas avec les bases de Java
Affichage saisonnier avec commutateur Java
Utiliser SpatiaLite avec Java / JDBC
Étudier Java avec Progate Note 1
Comparez Java 8 en option avec Swift
Liste Java en tant que groupe, tri, etc.
Analyse HTML (scraping) avec JAVA
Exécuter Java VM avec Web Assembly
Tri des bulles à l'aide de ArrayList (JAVA)
Transition d'écran avec swing, java
Test unitaire Java avec Mockito
[Java 8] Suppression en double (et vérification en double) avec Stream