Je souhaite développer une démo de tri pour la liste des voitures. J'utilise le tableau de données pour afficher la liste des voitures. Maintenant, je veux trier la liste par couleur de voiture. Ici, il n'est pas trié par ordre alphabétique. Je veux utiliser mon ordre de tri personnalisé comme la voiture rouge vient en premier, puis la bleue, etc.
Pour cela j'essaye d'utiliser Java Comparator
et Comparable
mais cela permet de trier uniquement par ordre alphabétique.
Alors, quelqu'un peut-il me guider sur la manière de mettre en œuvre la technique à utiliser pour que le tri devienne plus rapide.
class Car implements Comparable<Car>
{
private String name;
private String color;
public Car(String name, String color){
this.name = name;
this.color = color;
}
//Implement the natural order for this class
public int compareTo(Car c) {
return name.compareTo(c.name);
}
static class ColorComparator implements Comparator<Car> {
public int compare(Car c1, Car c2) {
String a1 = c1.color;
String a2 = c2.color;
return a1.compareTo(a2);
}
}
public static void main(String[] args) {
List<Car> carList = new ArrayList<>();
List<String> sortOrder = new ArrayList<>();
carList.add(new Car("Ford","Silver"));
carList.add(new Car("Tes","Blue"));
carList.add(new Car("Honda","Magenta"));
sortOrder.add("Silver");
sortOrder.add("Magenta");
sortOrder.add("Blue");
// Now here I am confuse how to implement my custom sort
}
}
enum
valeurs est l'ordre dans lequel ses valeurs sont définies.Que dis-tu de ça:
En principe, je conviens que l'utilisation d'un
enum
est une approche encore meilleure, mais cette version est plus flexible car elle vous permet de définir différents ordres de tri.Mettre à jour
Guava a cette fonctionnalité intégrée dans sa
Ordering
classe:Cette version est un peu moins verbeuse.
Mettre à jour à nouveau
Java 8 rend le comparateur encore moins verbeux:
la source
Comparateur en ligne ...
la source
Je pense que cela peut être fait comme suit:
Pour le tri, utilisez ceci:
la source
J'ai dû faire quelque chose de similaire à la réponse de Sean et ilalex.
Mais j'avais trop d'options pour définir explicitement l'ordre de tri et je n'avais besoin que de faire flotter certaines entrées au début de la liste ... dans l'ordre spécifié (non naturel).
J'espère que cela sera utile à quelqu'un d'autre.
la source
Je vais faire quelque chose comme ça:
Tous les crédits vont à @Sean Patrick Floyd :)
la source
Dans Java 8, vous pouvez faire quelque chose comme ceci:
Vous avez d'abord besoin d'un Enum:
Classe de voiture:
Et puis, en utilisant votre liste de voitures, vous pouvez simplement faire:
la source
Définissez un type d'énumération comme
Modifier le type de données
color
deString
àColors
Modifier le type de retour et le type d'argument de la méthode de lecture et de définition de la couleur enColors
Définissez le type de comparateur comme suit
après avoir ajouté des éléments à List, appelez la méthode de tri de Collection en passant des objets liste et comparateur comme arguments
c'est-à-dire,
Collections.sort(carList, new ColorComparator());
puis imprimez en utilisantListIterator
.l'implémentation complète de la classe est la suivante:
la source
En utilisant juste de simples boucles:
Et l'ordre de tri dans la liste
la source