Poursuivant la précédente [Java 8] Utilisation appropriée de Compareable et Comparator du point de vue du tri des employés, voici des conseils pour le tri.
Je n'ai pas pu trouver grand-chose quand je l'ai cherché,
["2", "32", "100", "13", "1", "21"]
Un tel arrangement
["A02", "12", "A11", "A01", "B01", "A21"]
Je veux trier ce genre de tableau ** "Yoshina" **! As-tu déjà pensé?
Il est difficile d'analyser chaque nombre, et une fois analysé, il est difficile de contrôler quand ce n'est pas un nombre. Ce n'est pas un gros problème, mais je pensais que cela pourrait être résolu avec un processus relativement simple, alors je vais écrire le processus.
Résultat de tri attendu
["1", "2", "13", "21", "32", "100"]
// ->Avant de trier["2", "32", "100", "13", "1", "21"]
["12", "A01", "A02", "A11", "A21", "B01"]
// ->Avant de trier["A02", "12", "A11", "A01", "B01", "A21"]
La ligne du bas est ** comparez d'abord les longueurs des chaînes, puis comparez les chaînes **.
Je vais effectivement l'écrire.
Comparez les longueurs des chaînes, puis comparez les chaînes
pubic List<String> sort(List<String> list) {
list.sort((s1, s2) -> {
if (compareLength(s1, s2) == 0) {
return s1.compareTo(s2);
}
return compareLength(s1, s2);
});
return list;
}
private int compareLength(String s1, String s2) {
if (s1.length() > s2.length()) {
return 1;
} else if (s1.length() < s2.length()) {
return -1;
} else {
return 0;
}
}
Résultat d'exécution
List<String> list1 = new ArrayList<>(Arrays.asList("2", "32", "100", "13", "1", "21"));↲
List<String> list2 = new ArrayList<>(Arrays.asList("A02", "12", "A11", "A01", "B01", "A21"));↲
List<String> list3 = new ArrayList<>(Arrays.asList("0002", "0032", "0100", "0013", "0001", "0021"));↲
System.out.println(ArrayUtils.toString(sort(list1)));
System.out.println(ArrayUtils.toString(sort(list2)));
//Résultat d'exécution
[1, 2, 13, 21, 32, 100]
[12, A01, A02, A11, A21, B01]
À propos, même si les chiffres sont complétés avec 0, si le nombre de chiffres est le même, il sera trié comme prévu.
En cas de remplissage 0
List<String> list = new ArrayList<>(Arrays.asList("0002", "0032", "0100", "0013", "0001", "0021"));↲
System.out.println(ArrayUtils.toString(sort(list)));
//Résultat d'exécution
[0001, 0002, 0013, 0021, 0032, 0100]
Je ne pense pas qu'il puisse être utilisé dans n'importe quelle situation car il dit ** "Yoshinani" **, mais personnellement je suis satisfait des résultats attendus. Si vous avez une logique qui peut être traitée plus intelligemment, ou une liste qui ne peut pas être traitée "bien" avec cette méthode, je vous serais reconnaissant de bien vouloir la partager!
Il a fait remarquer que ce serait plus simple si vous faisiez ce qui suit!
List<String> list = Arrays.asList("2", "32", "100", "13", "1", "21");
list.sort(Comparator.comparing(String::length).thenComparing(Function.identity());
System.out.println(list);
Recommended Posts